Contribuindo ao projeto templ com a flag --ignore-pattern

29 de dezembro de 2025

templgoopen-sourcecligithub

O templ é uma linguagem de templates que permite escrever interfaces de usuário em HTML de forma tipada usando Go: templ-demo

O modo watch do templ

Um dos comandos da CLI do templ mais usados no dia a dia é o templ generate --watch.

Nesse modo, o templ observa mudanças no sistema de arquivos e regenera automaticamente os arquivos .go a partir dos templates .templ. Isso melhora muito o fluxo de desenvolvimento, especialmente quando combinado com hot reload no navegador.

Para controlar quais arquivos devem disparar a regeneração, o templ permite configurar um padrão de observação usando uma expressão regular. Apenas arquivos que casam com esse padrão são considerados pelo watcher.

O problema na prática

Em projetos reais, nem todos os arquivos dentro do diretório observado deveriam disparar uma nova geração. É comum existir arquivos gerados por outras ferramentas ou artefatos temporários.

No meu caso, estava utilizando o comando templ generate --watch com a flag --watch-pattern configurada com o seguinte padrão de observação:

(.+\.(go|templ|css|txt|js|png|jpe?g|gif|webp)$)

Esse padrão inclui arquivos .go, o que faz sentido na maioria dos projetos, já que mudanças em código Go podem afetar templates, handlers ou integração com o frontend.

O problema é que um arquivo específico, ./mage_output_file.go, era gerado automaticamente por outra ferramenta. Sempre que esse arquivo era atualizado, o watcher do templ era acionado, disparando o processo de geração repetidas vezes e criando um ciclo desnecessário.

Mesmo tentando ajustar o regex, não havia uma forma confiável de expressar “observe arquivos .go, exceto este arquivo específico”. O templ utiliza esse padrão apenas como filtro de inclusão, e o motor de regex empregado não permite compor exclusões pontuais de forma clara nesse contexto.

Na prática, isso significa que não havia como dizer “observe tudo isso, exceto tal arquivo”, nem mesmo recorrendo a expressões regulares mais elaboradas.

Esse problema foi descrito inicialmente em uma issue no repositório do templ, onde discuto o cenário e as limitações da abordagem atual:
#1279 – Can we have a --ignore-pattern flag for watch mode?

A ideia: separar inclusão de exclusão

A solução foi introduzir uma forma explícita de exclusão. Em vez de tentar resolver tudo com um único padrão, a CLI passou a oferecer dois conceitos distintos:

  • um padrão para definir quais arquivos devem ser observados
  • um padrão opcional para definir quais arquivos devem ser ignorados

A contribuição

A implementação dessa ideia foi feita em um pull request no repositório do templ, onde a nova flag foi adicionada junto com testes automatizados e revisão do código:
#1280 – Add --ignore-pattern flag to generate --watch

Para garantir que o comportamento estivesse correto, foram adicionados testes automatizados cobrindo os principais cenários: arquivos que devem ser ignorados não disparam eventos, e regras de exclusão têm precedência sobre regras de observação.

Todo o trabalho seguiu um fluxo previsível de contribuição open source: discussão do problema, implementação, testes e revisão. O comportamento padrão do templ permanece exatamente o mesmo para quem não usa a flag, garantindo compatibilidade com projetos existentes.

Impacto

Essa mudança resolve um problema pequeno, mas bastante comum em fluxos de desenvolvimento mais complexos. Agora, qualquer pessoa que use o templ pode decidir o que observar e o que ignorar, adaptando o watch à realidade do seu projeto — seja para evitar loops, reduzir ruído ou integrar melhor com outras ferramentas.

É o tipo de melhoria que nasce de um incômodo real e acaba beneficiando toda a comunidade, cada um usando da forma que fizer mais sentido no seu contexto.

Compartilhe este artigo