Author |
Topic |
Went
New Member
4 Posts |
Posted - Sep 26 2015 : 05:34:31 AM
|
Hello. There is an old-new annoying bug in the actual VAssist version. When I autocomplete some word in a string, VA overwrites next word with found suggestion instead of to insert it before one. It's very confusing and waste much of my time. |
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Sep 27 2015 : 9:56:05 PM
|
We've improved the behaviour for this in the last build. The logic behind overwriting is the following: if you type something before a word without space and you accept the listbox, it will only replace the word right to the caret when that word cannot be found in the symbol databases.
We're considering a new setting to be able to disable the overwriting behaviour altogether: case=90899
For now, you can put a space between the symbol and what you type as a workaround. |
|
|
Went
New Member
4 Posts |
Posted - Sep 28 2015 : 02:48:55 AM
|
Thank you for understanding. I will wait for new build :) |
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Sep 28 2015 : 10:27:42 PM
|
I've increased the priority of this case for you. |
Edited by - accord on Sep 28 2015 10:27:53 PM |
|
|
fredizzimo
Junior Member
Finland
11 Posts |
Posted - Oct 30 2015 : 09:29:43 AM
|
What's the status of this?
This behavior is very annoying, for example when you have moved a free function to a class, and you want to refactor the code and insert variable->, before all the calls.
The space workaround is also not really a solution, and it's hard to remember to use it, and when you actually do remember, it's still very annoying. A little bit better is to leave the old symbol in place, to avoid the overwriting, until all calls are replaced, but then you can't rely on compiler errors until it's completely deleted.
Personally I never want the following word to be overwritten, as I'm using VSVim, so if I actually need to change the word I would use cw or ciw.
|
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Oct 30 2015 : 12:21:24 PM
|
If the word is a known symbol it should not be overwritten.
Regarding the status: the case is resolved as implemented so it should be in the next build if it passes internal testing. |
|
|
sean
Whole Tomato Software
USA
2817 Posts |
Posted - Nov 20 2015 : 4:03:42 PM
|
case=90899 is implemented in build 2083 via the registry value named "CompletionOverwriteBehavior"
0: default behavior, va will overwrite text immediately to right of caret in some scenarios 1: never overwrite text immediately right of caret 2: always overwrite text immediately right of caret
http://support.wholetomato.com/default.asp?W640
|
Edited by - feline on Nov 21 2015 4:38:54 PM |
|
|
Adequat
Tomato Guru
182 Posts |
Posted - Jul 30 2016 : 05:03:31 AM
|
Do you have a list of all registry "secrets"? I have lost so many hours of typing before I find this option. You should actually have a UI to access all the "secret" options. Don't forget your audience: you are talking to programmers, a category of people not afraid of advanced options! (the common concept "limit the options" to make it easy for users, does not apply to the VA business domain).
|
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Jul 30 2016 : 05:50:00 AM
|
We used to have a page for all registry settings, but we don't want to encourage to modify a lot of them, because if something goes wrong, who knows what is causing the problem.
Our new approach is multi-faceted:
1. We put related settings on the bottom of our documentation. For example, this registy setting can be found on the bottom of this page: https://docs.wholetomato.com/default.asp?W204
2. You can search our kb articles: https://docs.wholetomato.com/default.asp?pg=pgWikiView&ixWiki=8&sView=title_index
3. We're planning to add an advanced part of our options dialog. It would be a filtered list of options that we officially support.
case=69399 |
Edited by - accord on Aug 02 2016 2:00:18 PM |
|
|
tjcbs
Tomato Guru
104 Posts |
Posted - Aug 17 2016 : 06:00:01 AM
|
I was going to complain about this in another thread, but the "known symbol" thing just doesn't work. Please test it. |
|
|
Mordachai
Tomato Guru
USA
224 Posts |
Posted - Aug 17 2016 : 10:20:37 AM
|
I'm going to pile on here too - see my post in "feature requests" - but this is essentially the same thing.
It's unpleasant the way it destroys instead of inserts.
If my cursor is ON the symbol and I accept a suggestion - fine, replace it.
But if my cursor is inserting at the head of it, just insert the accepted symbol. |
Edited by - Mordachai on Aug 17 2016 11:01:14 AM |
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Aug 18 2016 : 9:05:30 PM
|
I have found some problems with listbox behavior. I found cases when it overwrites despite it shouldn't. I have put in a bug report for this:
case=99511
I found this to be an issue with Visual Assist listboxes (with tomato icons) It means that it will happen more with disabled intellisense.
Have any of you disabled default intellisense? Tools -> Options... -> Text Editor -> C/C++ -> Advanced -> Disable Intellisense |
Edited by - accord on Aug 18 2016 9:11:58 PM |
|
|
Mordachai
Tomato Guru
USA
224 Posts |
Posted - Aug 19 2016 : 10:13:03 AM
|
not I - I leave intellisense on. fwiw.
EDIT: I have found that this happens if the symbol I'm trying to insert text in front of is known by intellisense or not.
If the symbol is unknown, then my typing -> suggestion accepted -> inserts the new symbol.
If the symbol is known, then my typing -> suggestion accepted -> replaces the old "known" symbol.
The first behavior is far more useful - if there is a way to tell VA / VS "always insert - never try to guess what I mean" that would be greaaat! ;) |
Edited by - Mordachai on Aug 19 2016 4:10:59 PM |
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Aug 19 2016 : 9:23:34 PM
|
You can achieve what you are after: https://docs.wholetomato.com/default.asp?W640
But we also want to improve the behavior by default. We have found inconsistencies about it which makes it unpredictable thus annoying. |
Edited by - accord on Aug 19 2016 9:24:27 PM |
|
|
rb_
Junior Member
13 Posts |
Posted - Aug 24 2016 : 01:09:09 AM
|
I recently upgraded from a much older version of VAX and this became a problem for me almost immediately.
Please fix it or at least provide a proper GUI setting for it until you are sure it's fixed.
This is very annoying and I imagine that not everyone will be able to find the registry workaround (I searched for quite a while before I found this thread).
Yes, my IntelliSense is disabled. |
|
|
sean
Whole Tomato Software
USA
2817 Posts |
Posted - Sep 17 2016 : 2:50:12 PM
|
case=99511 is fixed in build 2112. |
|
|
rb_
Junior Member
13 Posts |
Posted - Oct 05 2016 : 01:10:45 AM
|
This is still a problem for me on 2112.
Please just add a control to completely turn off the overwriting behavior. I can't think of any case where I would want the next word to be overwritten. If I really wanted that, I could easily do that myself (e.g. ctrl+delete).
For example, if there is a macro invocation, and I need to add an argument to the front, like this:
FOO(bar);
->
FOO(baz, bar);
It doesn't work right, even though bar is a symbol recognized by VAX (I can alt+g to it).
Currently I have to first remember to add a space - or type the entire thing and not use autocomplete, which can be annoying (at just this moment I need to actually make about 50 such edits involving rather long identifiers :( - and no I can't just batch replace because they're all different in this case)
This particular macro invocation case might be another specific bug, but there could be others... To me, it doesn't matter how well or poorly this works - I don't want the behavior at all. Probably there will be some odd cases (e.g. a macro that takes arguments that aren't symbols at all) that will never work as expected, so the only truly reliable solution to this is to allow the user to disable the overwrite behavior completely. |
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Oct 05 2016 : 07:38:24 AM
|
Have you tried the registry setting described here? https://docs.wholetomato.com/default.asp?W640
Close all instances of the IDE before editing the registry to ensure your changes are not overwritten at IDE exit. |
Edited by - accord on Oct 05 2016 07:38:50 AM |
|
|
rb_
Junior Member
13 Posts |
Posted - Oct 05 2016 : 2:15:48 PM
|
Strange... I had seen that registry key before but don't recall whether I had tried it or not. I would think I'd already have tried that. Maybe I found that I wanted the overwrite behavior in some cases after all... or perhaps somehow the setting became reverted.
Thanks for the reminder.
I'll try that again and see how it goes. Will follow up if I find it doesn't work well for me for some reason. |
|
|
rb_
Junior Member
13 Posts |
Posted - Oct 05 2016 : 7:39:44 PM
|
Oops... it turns out I didn't edit the registry setting for the new IDE I switched too. It's working fine. |
|
|
Mordachai
Tomato Guru
USA
224 Posts |
Posted - Oct 06 2016 : 10:48:17 AM
|
quote: Originally posted by Mordachai
I'm going to pile on here too - see my post in "feature requests" - but this is essentially the same thing.
It's unpleasant the way it destroys instead of inserts.
If my cursor is ON the symbol and I accept a suggestion - fine, replace it.
But if my cursor is inserting at the head of it, just insert the accepted symbol.
I read through this entire thread again. I had previously missed the registry edit - and I'm trying that out now.
HOWEVER - that behavior is still NOT what I want.
I want "if cursor is ON the symbol, replace it; if the cursor is BEFORE the symbol, insert it." Your registry only allows "always/never/default" - where default is the problematic behavior I don't like. Always & Never are too dumb. I need "if cursor is on the symbol, replace it. If cursor is in front (at leading edge) do NOT replace it)."
EDIT: Also, the documentation seems to be the opposite of what's true:
It claims that it will replace the symbol unless it is known. But the behavior I've witnessed is it will replace the symbol unless it is UNknown. |
Edited by - Mordachai on Oct 06 2016 2:38:33 PM |
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Oct 06 2016 : 6:38:05 PM
|
Mordachai: we improved the behaviour with build 2112. Have you tried using that? |
|
|
Mordachai
Tomato Guru
USA
224 Posts |
Posted - Oct 07 2016 : 3:05:28 PM
|
I will try for the next week and give you feedback if I have problems. Thank you! |
|
|
Mordachai
Tomato Guru
USA
224 Posts |
Posted - Oct 07 2016 : 5:10:37 PM
|
Hey - so far so good!!!
I've been inserting namespace qualifiers without VA overwriting the symbol I'm trying to qualify! Woot!
THANK YOU! :D |
|
|
Mordachai
Tomato Guru
USA
224 Posts |
Posted - Oct 10 2016 : 10:36:36 AM
|
Okay - an update - :(
Here's a common scenario: I need to change the level of indirection of my code (almost any problem can be solved with another layer of indirection):
So instead of an object being stored in the container `m_OtherInstallsOfThisProduct`, a pointer of some type is stored there. So I need to change the following from a direct -> to ->get(). But when I type get - and am offered the "get()" from the drop-down, and accept it, "GetPaidVersion" is deleted!!!
This is sooooo wrong. My cursor is at the BEGINNING of a symbol, not the middle of it, and so accepting the offered symbol should INSERT it.
It's really that simple 99.999% of the time.
Also - even if that algorithm is wrong - it's super trivial to hit Shift+Del to delete to the next non-symbol character - whereas it is a major PIA to have to undo and walk back this over-eager replacement strategy that VA seems to insist upon using. :(
return m_OtherInstallsOfThisProduct.begin()->GetPaidVersion() < CCimexPaidVersion(m_Version); return m_OtherInstallsOfThisProduct.begin()->^geGetPaidVersion() < CCimexPaidVersion(m_Version);
Please offer a registry setting or - better - change the default behavior to respect my insertion point.
If I am at the head of a symbol - PLEASE DO NOT OVERWRITE IT.
Or tell me of the scenarios where overwriting it is not only better, but creates less work and headache for me than having to leave the "wrong text" after accepting the suggestion (which I can super-trivially delete with Shift+Del)?
|
|
|
Mordachai
Tomato Guru
USA
224 Posts |
Posted - Oct 10 2016 : 12:35:58 PM
|
quote: Originally posted by Mordachai
Okay - an update - :(
Here's a common scenario: I need to change the level of indirection of my code (almost any problem can be solved with another layer of indirection):
So instead of an object being stored in the container `m_OtherInstallsOfThisProduct`, a pointer of some type is stored there. So I need to change the following from a direct -> to ->get(). But when I type get - and am offered the "get()" from the drop-down, and accept it, "GetPaidVersion" is deleted!!!
This is sooooo wrong. My cursor is at the BEGINNING of a symbol, not the middle of it, and so accepting the offered symbol should INSERT it.
It's really that simple 99.999% of the time.
Also - even if that algorithm is wrong - it's super trivial to hit Ctrl+Del to delete everything to the right up to the next non-symbol character - whereas it is a major PIA to have to undo and walk back this over-eager replacement strategy that VA seems to insist upon using. :(
return m_OtherInstallsOfThisProduct.begin()->GetPaidVersion() < CCimexPaidVersion(m_Version); return m_OtherInstallsOfThisProduct.begin()->^geGetPaidVersion() < CCimexPaidVersion(m_Version);
Please offer a registry setting or - better - change the default behavior to respect my insertion point.
If I am at the head of a symbol - PLEASE DO NOT OVERWRITE IT.
Or tell me of the scenarios where overwriting it is not only better, but creates less work and headache for me than having to leave the "wrong text" after accepting the suggestion (which I can super-trivially delete with Ctrl+Del)?
|
|
|
tjcbs
Tomato Guru
104 Posts |
Posted - Jan 03 2017 : 3:23:37 PM
|
Please add a proper setting for this.
It is extrememly annoying having to find this post with each new install of VS.
Since it is in the registry only, it can not be exported along with the other VS settings. |
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Jan 03 2017 : 6:27:02 PM
|
Mordachai: thank you for your feedback. After pondering about your request, I have put it a feature request for this to see what the team thinks of this idea:
case=102622
For now, can you change this registry setting as a workaround: https://docs.wholetomato.com/default.asp?W640
My new proposed behaviour would be something like this: 1. If you're typing at the middle of the symbol or pressing ctrl+space there, overwrite would happen. You may be changing a symbol which can be common with enums (changing to another enum item). e.g. changing STATE_WAITING to STATE_RUSH. I do this type of changes often.
2. If you're typing at the beginning of the symbol, VA would always overwriteinsert, which is useful with qualifications. e.g. you have an enum but you want to qualify it: You type EnumName:: before STATE_WAITING, and accepting a listbox for the enum name. e.g. when you changed the enum to enum class.
tjcbs: sorry for the inconvenience. Would the new proposed method work better for you as well?
For now, you can export your VA settings via: VA Options -> Performance -> Export |
Edited by - accord on May 21 2017 1:03:50 PM |
|
|
rb_
Junior Member
13 Posts |
Posted - Jan 03 2017 : 6:49:58 PM
|
The proposed work around still wouldn't meet my expectations - which is that symbols should never be overwritten.
I reiterate the request to simply make this a setting - allow overwriting behavior of this feature to be completely disabled.
You already have it as a registry key. Why not add it as a GUI setting? |
|
|
accord
Whole Tomato Software
United Kingdom
3287 Posts |
Posted - Jan 03 2017 : 6:55:53 PM
|
I have put in a feature request to add an option for CompletionOverwriteBehavior in VA Option dialog
case=102623 |
|
|
tjcbs
Tomato Guru
104 Posts |
Posted - May 19 2017 : 4:47:23 PM
|
Please implement this already. It is a single gui option, it shouldn't be hard. Once again, I have to find the post, and slog through the process of changing this registry setting. This behavior is wasting your user's time, your job is to preserve their time, and their sanity. |
|
|
Topic |
|