In fact my goal is to add surround bracket that are missing around a
return which follow if while etc...
Actual PB :
-------------------
Case 1 :
if ( cd1
&& cd2 )
return;
Case 2 :
if ( cd1
&& cd2 )
// COMMENT
/****/* another comment*/
return;
Case 3 :
while ( cd1
&& cd2 )
// COMMENT
/****/* another comment*/
return;
Goal to reach:
-------------------
All that have to become :
while(cd1 && cd2)
{
return;
}
My temporary solution :
----------------------------------
I have tried another way by writing a func which returns 1 or 0 to say
return is following an if , while etc..
1/ search for if
2/ delete // COMMENT
3/ delete /* comment by % and visual selection
4/ delete blank lines
5/ analysis if the return line is just after my if line
function! RectifieMultiLignesIf()
norm 1G
" recherche tous les if (extensible aux elseif while for etc... ) qui
ont un bloc conditionnel sur plusieurs lignes et recode sur une seule
ligne le bloc conditionnel
let flags = "w"
let instruction = "if"
while search("if", flags, line("$")) > 0
if CheckIfCursorIsCommented() == 0
if search("(", flags) > 0
let beginLine = line(".")
endif
norm %
let endLine = line(".")
norm %
" cas ou le bloc est codé sur plusieurs lignes
let deltaLines = 0
if endLine > beginLine
let deltaLines = endLine - beginLine + 1
endif
" remonter sur une seule ligne les lignes du bloc conditionnel
if deltaLines != 0
exec 'norm ' . deltaLines . 'J'
endif
let lineOfInstruction = line('.')
" une fois codé sur une ligne verifie qu'il s'agit d'une ligne ave
un return et
" qu'il y a les accolades du bloc d'instructions sinon on les
ajoute
"
" if ( cond1 &&
" cond2 ) return
"
"
if ( matchstr(getline(line(".")), g:patternReturn ) != "" )
" s il n y a pas de bloc d'instruction sur cette ligne là où un
return a été detecté
if ( search("{", 'w', line(".")) == 0 )
exec "norm ^/if"
exec "norm f(%a
{
"
exec "norm $a
}"
endif
else
" le return n'est pas sur la meme ligne que le bloc conditionnel
"
" if ( cond1 && cond2 )
" // COMM
" /*
" AUTRE COM
" */
" return
"
"
if DetectReturnAfterInstruct() == 1
endif
endif " match un return sur la meme ligne que le bloc conditionnel
endif
endwhile
endfunction
But I am opened to the most optimized solution (time performance) if I
can search with a regexp to identify that the return is following the
if and it is fast,
I will prefer to take the regexp.
NB : I will try your work this journey. Say what are you thinking
about my func if you have time.
Thanks
Best Regards
--
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php
No comments:
Post a Comment