Friday, November 27, 2009

Re: Detect when a return follow an if instruction without bracket

Luc Hermitte schrieb:
> Hello,
>
> "epanda" <callingelvis@hotmail.fr> a écrit :
>
>> if (condition1
>> && condition 3 )
>> return
>
> Wouldn't a ")[[:blank_or_comment:]]return\>" be enough ?
> Of course it would match nonsense code like "foo(42) return;" or
> "while (cond) return", but does it really matter?

Yes, as skipping nested parens (within the condition) with a regexp is
not possible, it makes sense to not even try it.

> In GotoImpl [1], I've implemented the [[:blank_or_comment:]] this way:
> \(\_s\|/\*.\{-}\*/\|//.*$\)*

Epanda, for a C-comment, the pattern
\/\*\_.\{-}\*\/
is simpler than what I gave you.

Note on escaping: in a pattern for functions like substitute() there is
no need to escape '/'. But for a :s/pat/repl/flags-command, '/' needs
to be escaped (except in a collection?).

> (Hum ... oddly I did not use \_. instead of . in the second
> expression... I guess the pattern should be modified to use the \@
> multi-items)

'\@' multi item?

> [1] http://code.google.com/p/lh-vim/wiki/lhCpp and more precisely:
> http://code.google.com/p/lh-vim/source/browse/cpp/trunk/autoload/lh/cpp/AnalysisLib_Function.vim#526

Result:
/)\%(\_s\|\/\*.\{-}\*\/\|\/\/.*$\)*return\>

Minor difference: it will match wrong code like

)
/* */ */
return


Alternative:
/)\_s*\%(\%(\/\*.\{-}\*\/\|\/\/.*$\)\_s*\)*return\>

This way it's easier to restrict the number of comments:
/)\_s*\%(\%(\/\*.\{-}\*\/\|\/\/.*$\)\_s*\)\{,5}return\>

--
Andy

--
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php

No comments: