Markdown: Sintaxe Estendida GFM e Emoji
O Markdown tem variações padrão e estendidas — GitHub Flavored Markdown é a extensão mais utilizada, adicionando muitos recursos práticos de sintaxe.
1. O Que Você Vai Aprender
- A diferença entre GFM e Markdown padrão
- Uso completo de listas de tarefas
- Como inserir emoji
- Uso de notas de rodapé e listas de definição
- Links automáticos e reconhecimento de URL
- Como ignorar/escapar a sintaxe Markdown
2. A História Real de um Mantenedor de Código Aberto
(1) Problema: Issues Carecem de Informações Estruturadas
Morgan mantém um projeto de código aberto com mais de 5000 estrelas e recebe dezenas de Issues todos os dias. Os envios são uma bagunça — alguns não têm passos de reprodução, outros esquecem de incluir mensagens de erro, alguns colocam emoji nos títulos dificultando a filtragem. Os mantenedores gastam muito tempo perguntando "qual versão você está usando?" e "qual é a mensagem de erro completa?"
(2) Solução: Criar Modelos de Issue com GFM
Morgan criou modelos de Issue no GitHub usando listas de tarefas (checklists - [ ]), tabelas (informações de versão/ambiente) e blocos de código (logs de erro) para estruturar as informações. Emoji marcam o tipo de Issue: 🐛 Bug, ✨ Funcionalidade, 📖 Documentação. Após a implantação do modelo, a completude das Issues subiu de 30% para 85%, e o tempo médio de tratamento foi reduzido pela metade.
3. Visão Geral do GFM
GitHub Flavored Markdown (GFM) é um superconjunto do Markdown padrão, adicionando extensões específicas do GitHub sobre a especificação CommonMark:
graph TB
A[GFM - GitHub Flavored Markdown] --> B[Padrão CommonMark]
A --> C[Extensões GFM]
C --> D[Listas de Tarefas]
C --> E[Tabelas]
C --> F[Tachado]
C --> G[Links Automáticos]
C --> H[Emoji]
C --> I[Escape de Sintaxe]
| Recurso | Markdown Padrão | GFM |
|---|---|---|
| Tabelas | ❌ Sem padrão | ✅ Suporte completo |
| Listas de Tarefas | ❌ Sem padrão | ✅ Suportado |
| Tachado | ❌ Sem padrão | ✅ |
| Links Automáticos | ⚠️ Apenas <> |
✅ Reconhecimento automático de URL |
| Emoji | ❌ Sem padrão | ✅ :smile: |
| Destaque de sintaxe em código com cerca | ⚠️ Parcial | ✅ Suporte completo |
| Escape de Markdown | ❌ Não suportado | ✅ Escape com \ |
4. Emoji
(1) Duas formas de inserir emoji
Método 1 (recomendado): Usar códigos curtos entre dois pontos
:smile: → 😄
:rocket: → 🚀
:warning: → ⚠️
Método 2: Colar caracteres de emoji diretamente
😄 🚀 ⚠️ ✅ ❌
(2) Emoji comuns para documentação técnica
✅ Concluído / ❌ Reprovado / ⚠️ Atenção
🐛 Bug / ✨ Nova Funcionalidade / 📖 Documentação
🚀 Lançamento / 🔧 Configuração / 🎨 Estilo
📦 Dependências / 🔒 Segurança / 📊 Dados
:smile:). Algumas só suportam caracteres de emoji colados. Para máxima compatibilidade fora do GitHub, cole caracteres de emoji diretamente.
▶ Exemplo: Usando emoji para rotular tipos de Issue
## Modelo de Issue
### Tipo
- 🐛 Relatório de Bug
- ✨ Solicitação de Funcionalidade
- 📖 Melhoria na Documentação
- 🔧 Problema de Configuração
### Ambiente
- SO: macOS 14.5
- Navegador: Chrome 126
- Versão: v2.3.1
5. Links Automáticos e Reconhecimento de URL
(1) Reconhecimento automático de URL
O GFM converte automaticamente URLs em links clicáveis — sem necessidade de <>:
Visite https://github.com para saber mais.
Documentação: https://developer.mozilla.org
Repositório do projeto: https://github.com/usuario/repo
(2) Reconhecimento automático de e-mail
Entre em contato: suporte@exemplo.com
E-mail do autor: autor@exemplo.com
6. Ignorando a Sintaxe Markdown
Use a barra invertida \ para escapar caracteres Markdown e exibi-los como texto simples:
\# Isto não é um cabeçalho — exibe o caractere "#"
\*\*Isto não é negrito\*\*
\- Isto não é um item de lista
\[Isto não é um link\](url)
` para mostrar sua forma bruta: `#` é exibido como # em vez de um cabeçalho.
▶ Exemplo: Cenários comuns de escape
Ao escrever tutoriais, às vezes você precisa mostrar a própria sintaxe Markdown:
Use \`#\` para denotar um cabeçalho de nível 1.
Exemplo de sintaxe: \*\*texto em negrito\*\*
No código é `**negrito real**` (envolvido em crases, não renderiza).
`**texto**` é exibido como estilo de código e não renderiza como negrito.
7. Outras Extensões do GFM
(1) Tachado
~~Este texto foi removido~~
~~Esta funcionalidade está obsoleta~~
(2) Formatação mais rica dentro de tabelas
As tabelas do GFM suportam código, links e múltiplos tipos de conteúdo:
| Comando | Descrição | Exemplo |
|:--------|:------------|:--------|
| `git status` | Mostrar status | [Docs][status] |
| `git log` | Mostrar histórico | modo compacto `--oneline` |
| ~~`git merge`~~ | Obsoleto | Use `rebase` em vez disso |
[status]: https://git-scm.com/docs/git-status
(3) Destaque de sintaxe em blocos de código com cerca
O GFM suporta destaque de sintaxe para dezenas de linguagens:
name: Pipeline CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm test
diff — linhas com + são exibidas em verde (adicionadas), linhas com - em vermelho (removidas). Perfeito para exibir alterações de código.
▶ Exemplo: Usando diff para mostrar alterações de código
# Versão antiga
- <script src="script-antigo.js"></script>
# Nova versão
+ <script src="script-novo.min.js" defer></script>
8. Exemplo Completo: Escrevendo uma Issue Completa com GFM
Título da Issue: Barra de navegação não expande no Firefox
Ambiente:
SO | Windows 11
Navegador | Firefox 128.0
Versão | v3.2.1
Passos para reproduzir:
1. Abra o aplicativo
2. Clique no menu de usuário no canto superior direito
3. O menu não expande
Saída do log:
[2026-06-15 14:32:01] Usuário clicou em nav-toggle
[2026-06-15 14:32:03] Nenhuma resposta do manipulador de alternância
Resultado esperado: Uma Issue estruturada do GitHub com rótulos de tipo claros (🐛 Bug), ambiente em uma tabela, passos de reprodução em uma lista ordenada e uma checklist como lista de tarefas.
❓ Perguntas Frequentes
P: Qual é a diferença entre GFM e Markdown padrão? R: O Markdown padrão é o conjunto de sintaxe mais básico (cabeçalhos, listas, links, etc.). O GFM adiciona tabelas, listas de tarefas, tachado, emoji, links automáticos e muito mais. A maioria das ferramentas modernas suporta GFM.
P: Os códigos curtos de emoji (
:smile:) funcionam em todos os lugares? R: Não.:smile:só funciona em plataformas específicas como GitHub, GitLab e Slack. No VS Code e Typora, cole caracteres de emoji diretamente.
P: E se meu analisador de Markdown não suportar GFM? R: Verifique a documentação do analisador para plugins ou opções GFM. O Pandoc usa
--from gfm, o marked.js suporta GFM por padrão, o Python-Markdown precisa deextensions=['extra'].
P: Como tornar o Markdown compatível com todos os analisadores? R: Use apenas sintaxe Markdown padrão (evite extensões GFM) e recorra ao HTML para partes não suportadas. Mas isso sacrifica a conveniência. Escolha o subconjunto de sintaxe adequado com base na sua plataforma de destino.
P:
[TOC]faz parte do GFM? R: Não.[TOC]é um recurso personalizado de certos editores (como a extensão Markdown All in One do VS Code, Typora) e não faz parte de nenhum padrão Markdown.
📖 Resumo
- GFM é a extensão do GitHub baseada no CommonMark, adicionando listas de tarefas, tabelas, tachado e muito mais
- Emoji podem ser inseridos via
:codigo:(GitHub) ou colados diretamente como caracteres - O GFM reconhece automaticamente URLs e e-mails — sem necessidade de
<> - Use
\para escapar caracteres especiais do Markdown e exibi-los como texto simples - A tag de linguagem
diffusa+/-para mostrar alterações de código [TOC]e similares não fazem parte de nenhum padrão ou do GFM — são recursos específicos de editores
📝 Exercícios
-
Básico: Escreva um documento de convenção de mensagens de commit Git que use emoji para rotular tipos de commit (ex.:
✨ Funcionalidade🐛 Correção) e inclua uma lista de tarefas como checklist de pré-commit. -
Intermediário: Use a tag de linguagem
diffpara mostrar uma comparação antes/depois de uma alteração de código (pelo menos 5 linhas, com adições e remoções). Depois use links automáticos para referenciar um repositório do GitHub. -
Desafiador: Crie um modelo completo de Issue do GitHub que combine tabelas (informações de ambiente), listas de tarefas (checklist), listas ordenadas (passos de reprodução), blocos de código (logs/config), emoji (rótulos de tipo) e citações em bloco (capturas de tela/notas extras).