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

Advanced find and replace

Started by Jewest, May 07, 2018, 11:16:08 AM

Previous topic - Next topic

Jewest

Hi,

I am using the vera++ checker and one of the remarks is that I use the short form for checking empty.
So far no problem, but I think the checker is right and I want to change the code.

so I want the change: if(!largertext.empty()) to: if(largertext.empty() == false)

any way to do this with the find and replace function?
If so how?

thank you in advance,

Jewest

sodev

Could be done with a regular expression, but i see no reason for. Actually the first form looks much more "correct" to me than the second one, especially in the c++ world where you use implicit conversions to bool the second one might even not work. Are you sure the checker complains about that? And are you sure that you are not using some strict c rules (i assume your code is c++)?

BlueHazzard

Do you want to do this only for one variable name, or for a lot different variable names?

Jewest

First up, sorry for the late reply. been busy using C::B to finish a project.

@Sodev: it is not an implicit convertion, !<statement> is. the return value of the function is a boolean.
@ BlueHazzard: Yes I would like to do this with different var names, otherwise a simple find and replace would due. but the vera++ is reporting about 100 times the same message.

Jewest

any suggestions?
How do I use the regexp to fix this?

oBFusCATed

Probably you'll fail badly if you use regexps. The best option at the moment is to write a clang-tidy check and fixups. Or see if there isn't one already.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

sodev

Depends on how well you keep your if's structured :).

The following expression does work with the CodeBlocks RegExp flavor and matches the presented format, it does allow extra whitespace where possible but it does not work with additional conditions nor if the if is spread across multiple lines nor if you use fancy unicode names for your identifiers (or anything else than 7-Bit ASCII).


Search: \([ \t]*if[ \t]*(\)[ \t]*![ \t]*\([a-zA-Z0-9_]+\.empty()\)[ \t]*\().*\)
Replace: \1\2 == false\3

Jewest

ended up using notepadQQ.
using find and replace "\(\!.*\)" replace with "(\1 == false)"