
Um formatador profissional e completo para a linguagem Progress 4GL (OpenEdge ABL) no Visual Studio Code. Este formatador aplica padrões de código consistentes e legíveis, seguindo as melhores práticas da comunidade Progress.
📋 Índice
✨ Características
- Padronização de Palavras-chave: Converte automaticamente palavras-chave para suas formas abreviadas padrão (
DEFINE → def, VARIABLE → var, etc.)
- Indentação Automática: Indenta corretamente todos os blocos de código Progress
- Alinhamento Inteligente: Alinha condições, atribuições e declarações para melhor legibilidade
- Suporte Completo: Funciona com todos os tipos de arquivos Progress (
.p, .w, .i, .cls)
🔧 Funcionalidades Principais
- Formata blocos
IF, FOR, REPEAT com múltiplas condições
- Alinha condições
AND/OR de forma consistente
- Mantém indentação correta em blocos aninhados
- Detecta e formata blocos
FIND com cláusulas WHERE
- Suporta
FOR EACH com WHERE na mesma linha ou em linhas separadas
- Alinha condições
WHERE/AND/OR automaticamente
- Alinha o operador
= em blocos ASSIGN de múltiplas linhas
- Mantém consistência visual em atribuições complexas
- Formata
def var, def param, def temp-table, def buffer, def stream
- Suporta modificadores (
new, global, shared, input, output)
- Alinha nomes de variáveis e tipos
🚀 Instalação
Via VS Code Marketplace
- Abra o VS Code
- Vá para a aba Extensions (Ctrl+Shift+X)
- Procure por "Progress 4GL Formatter"
- Clique em Install
Via VSIX
- Baixe o arquivo
.vsix da página de releases
- No VS Code, vá em Extensions → ... → Install from VSIX...
- Selecione o arquivo baixado
💻 Como Usar
- Abra um arquivo Progress (
.p, .w, .i, .cls)
- Use uma das seguintes opções:
- Atalho:
Shift+Alt+F (Windows/Linux) ou Shift+Option+F (Mac)
- Menu: Clique com botão direito → Format Document
- Paleta de Comandos:
Ctrl+Shift+P → Digite "Format Document"
Adicione ao seu settings.json do VS Code:
{
"[progress]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "CoimbroxDev.progress-4gl-formatter"
},
"[abl]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "CoimbroxDev.progress-4gl-formatter"
}
}
📖 Funcionalidades Detalhadas
Antes:
IF gra-par.cd-grau-parentesco = 01 OR gra-par.cd-grau-parentesco = 62 THEN DO:
Depois:
if gra-par.cd-grau-parentesco = 01
or gra-par.cd-grau-parentesco = 62
then do:
Antes:
FIND FIRST tmp-benef WHERE tmp-benef.cd-modalidade = usuario.cd-modalidade AND tmp-benef.nr-ter-adesao = usuario.nr-ter-adesao NO-LOCK NO-ERROR.
Depois:
find first tmp-benef
where tmp-benef.cd-modalidade = usuario.cd-modalidade
and tmp-benef.nr-ter-adesao = usuario.nr-ter-adesao
no-lock no-error.
Antes:
FOR EACH tmp-benef WHERE tmp-benef.cd-modalidade = notaserv.cd-modalidade AND tmp-benef.nr-ter-adesao = notaserv.nr-ter-adesao NO-LOCK:
Depois:
for each tmp-benef where tmp-benef.cd-modalidade = notaserv.cd-modalidade
and tmp-benef.nr-ter-adesao = notaserv.nr-ter-adesao
no-lock:
Antes:
ASSIGN vl-desconto-aux = 0 vl-mensalidade-aux = 0 pc-percentual-aux = 0.
Depois:
assign vl-desconto-aux = 0
vl-mensalidade-aux = 0
pc-percentual-aux = 0.
Antes:
DEFINE VARIABLE c-prog-gerado AS CHARACTER NO-UNDO INITIAL "dees045r".
DEFINE NEW GLOBAL SHARED VARIABLE c-arquivo-log AS CHAR FORMAT "x(60)" NO-UNDO.
Depois:
def var c-prog-gerado as character no-undo initial "dees045r".
def new global shared var c-arquivo-log as char format "x(60)" no-undo.
Antes:
DEFINE TEMP-TABLE tmp-benef NO-UNDO
FIELD cd-modalidade LIKE modalid.cd-modalidade
FIELD nr-ter-adesao LIKE ter-ade.nr-ter-adesao.
Depois:
def temp-table tmp-benef no-undo
field cd-modalidade like modalid.cd-modalidade
field nr-ter-adesao like ter-ade.nr-ter-adesao.
🎨 Exemplos Visuais
Exemplo 1: Bloco IF Complexo
Antes da formatação:
IF gra-par.cd-grau-parentesco = 01 OR gra-par.cd-grau-parentesco = 62 OR gra-par.cd-grau-parentesco = 63 THEN DO:
ASSIGN ds-grau-parentesco-aux = "TITULAR".
END.
Depois da formatação:
if gra-par.cd-grau-parentesco = 01
or gra-par.cd-grau-parentesco = 62
or gra-par.cd-grau-parentesco = 63
then do:
assign ds-grau-parentesco-aux = "TITULAR".
end.
Antes da formatação:
FIND FIRST vlbenef WHERE vlbenef.cd-modalidade = notaserv.cd-modalidade AND vlbenef.cd-contratante = notaserv.cd-contratante AND vlbenef.nr-ter-adesao = notaserv.nr-ter-adesao NO-LOCK NO-ERROR.
Depois da formatação:
find first vlbenef
where vlbenef.cd-modalidade = notaserv.cd-modalidade
and vlbenef.cd-contratante = notaserv.cd-contratante
and vlbenef.nr-ter-adesao = notaserv.nr-ter-adesao
no-lock no-error.
Antes da formatação:
ASSIGN vl-desconto-aux = 0 vl-mensalidade-aux = 0 pc-percentual-aux = 0 vl-total-aux = 0 vl-calculo-aux = 0.
Depois da formatação:
assign vl-desconto-aux = 0
vl-mensalidade-aux = 0
pc-percentual-aux = 0
vl-total-aux = 0
vl-calculo-aux = 0.
💡 Dica: Para ver exemplos mais detalhados, consulte a seção Exemplos acima.
⚙️ Configuração
Configurações Recomendadas
{
"[progress]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "CoimbroxDev.progress-4gl-formatter",
"editor.tabSize": 2,
"editor.insertSpaces": true
}
}
Configurações Avançadas
Atualmente, o formatador segue padrões estabelecidos pela comunidade Progress. Se você tiver necessidades específicas de formatação, abra uma Issue descrevendo seu caso de uso.
🤝 Contribuindo
Contribuições são muito bem-vindas! Este projeto está em desenvolvimento ativo e toda ajuda é apreciada.
Como Contribuir
- Reportar Bugs: Encontrou um bug? Abra uma Issue descrevendo o problema
- Sugerir Melhorias: Tem uma ideia? Abra uma Issue com sua sugestão
- Enviar Pull Requests: Implementou uma melhoria? Envie um PR!
Exemplos Úteis
Ao reportar problemas ou sugerir melhorias, inclua:
- Código antes da formatação
- Código depois da formatação (como você espera que fique)
- Contexto adicional se necessário
📝 Notas de Versão
Consulte o CHANGELOG.md para ver todas as mudanças e melhorias em cada versão.
Versão Atual: 0.0.4
Principais melhorias:
- ✅ Suporte completo para
FOR EACH com WHERE
- ✅ Melhorias na formatação de blocos
FIND
- ✅ Formatação aprimorada de blocos
ASSIGN
- ✅ Suporte para
def buffer e def stream
- ✅ Formatação de blocos condicionais (
IF/FOR/REPEAT)
📄 Licença
Este projeto está disponível como código aberto. Consulte o arquivo LICENSE para mais detalhes.
🔗 Links Úteis
👤 Autor
Commited for Support Microsoft
Gabriel Coimbra
⭐ Gostou do projeto? Considere dar uma estrela no repositório!