‘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.

Captura de Tela_Área de Seleção_20230205154534.png

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:

Captura de Tela_Área de Seleção_20230205155017.png

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:

Untitled

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\(([^)]*)\)\)\)
Show demais! Obrigada pela dica :)