‘Find’ e ‘replace’ avançados no VS Code
Recentemente precisei atualizar em todo o código fonte de um projeto grande algumas funções para outras melhores. Porém elas estavam em vários lugares no código de maneira diferente e não era uma simples busca que ia encontrar todas as ocorrências que eu precisava.
Foi aí que descobri que existe maneiras de fazer buscas e modificações avançadas no VS code com regex. Eu não sei se apenas ignorei a existência dessa opção a minha vida toda, mas ela realmente estava disponível e eu nunca tinha clicado. Vou mostrar na prática.
Eu queria retirar do código todos os lugares que possuíam essas 3 funções em específico:
TO_UPPER(remove_acento(REMOVE_ESPACOS_DUPLICADOS(conteudo_aqui)))
e alterar para uma única função. O problema é que como o conteúdo de dentro da função era diferente em cada lugar do código, ia ser um problemão remover só a primeira parte TO_UPPER(remove_acento(REMOVE_ESPACOS_DUPLICADOS(
e depois tentar localizar o restante dos )))
pra remover.
E aí que entra a opção avançada. Quando a gente clica em ctrl + F no VS Code, perceba que aparecem 3 opções no canto direito.
A primeira é para buscas case sensitive, a segunda para procurar palavras exatas e a terceira é que a eu estava precisando, buscas com o uso de expressões regulares.
Então vamos utilizar essa opção e tentar fazer a busca. Confesso que não manjo muito de expressões regulares, então foi uma dificuldade aplicar inicialmente. Mas ao aplicar, deu pra entender os principais objetivos. A minha busca ficou assim:
Como padrão, deu pra perceber que é necessário uma barra ao contrário \ antes de cada parêntese e na parte do conteúdo que era diferente foi necessário acrescentar um (.*?) para que ele considere qualquer conteúdo lá dentro.
E agora chegou a hora de modificar o conteúdo, então o replace ficou assim:
Pelo padrão, percebe que precisei colocar um $1 que significa aquele conteúdo qualquer da busca que fizemos acima. Agora é só confirmar a alteração em todos os casos, o legal é que aparece uma pré visualização de como estava (em vermelho) e como vai ficar (em verde).
E pronto! Fizemos uma busca e alteração com expressões regulares, o que me economizou um bom tempo de fazer um a um manualmente em um código imenso.
Espero que tenha ajudado e que você não ignore essa opção assim como eu ignorava haha
Em vez do (.*?)
, também poderia ser ([^)]*)
.
No caso, o [^)]
é "qualquer caractere que não seja parênteses" e o *
indica "zero ou mais ocorrências". Pode trocar por +
se quiser que tenha pelo menos um caractere.
Claro, isso funciona somente se não tem nenhum parênteses no conteúdo, antes do )))
final.
Ou seja, a expressão inteira ficaria:
TO_UPPER\(remove_acento\(REMOVE_ESPACOS_DUPLICADOS\(([^)]*)\)\)\)