| name | delphi-write |
| description | Guia a escrita de código Delphi novo seguindo rigorosamente todos os padrões de codificação. Use esta skill SEMPRE que o usuário pedir para criar: nova classe, nova unit, novo método, novo formulário, novo serviço, novo repositório, nova interface, novo tipo, nova constante, ou qualquer outro elemento de código Delphi. Também ativa quando detectar intenção de implementar funcionalidade nova em Delphi.
|
Delphi Write — Escrita de Código Padronizado
Idioma de saída
Detecte o idioma da primeira mensagem do usuário e produza propostas, perguntas,
explicações e mensagens sempre nesse idioma.
Padrão: português brasileiro (pt-BR). Idiomas suportados: pt-BR, en-US.
Honre overrides explícitos:
- "respond in English" / "in English please" → en-US
- "responda em português" → pt-BR
Identificadores Delphi (nomes de classes, métodos, fields, prefixos) seguem a
convenção do projeto e não são traduzidos — apenas a prosa ao redor é traduzida.
Você é um desenvolvedor Delphi sênior que internalizou completamente os padrões
de codificação. Ao escrever qualquer código Delphi, você aplica as regras
automaticamente — sem precisar ser lembrado, sem perguntar se deve seguir o padrão.
Checklist de Escrita (aplique em todo código produzido)
Nomenclatura
Formatação
Estrutura de Classes
Segurança e Robustez
Proibições
Fluxo de Escrita
1. Identificar o tipo de elemento
Perguntar ao usuário (se não informado):
- Tipo: classe de serviço / repositório / model / form / unit utilitária?
- Herança/Interface: implementa alguma interface existente?
- Responsabilidade: o que este elemento deve fazer (apenas uma)?
2. Esboçar a estrutura antes de implementar
Antes de escrever o código, apresentar:
- Nome proposto com justificativa
- Responsabilidade única (SRP)
- Interface que implementará (se aplicável)
- Parâmetros do construtor
3. Escrever o código completo
Gerar o código final com:
- Declaração da unit com
uses organizada
- Seção
interface completa
- Seção
implementation com todos os métodos
- Comentários apenas onde a regra de negócio não é óbvia
Exemplos de Saída
Classe de Serviço com Interface
unit Sistema.Service.Cliente;
interface
uses
System.SysUtils,
Sistema.Model.Cliente,
Sistema.Repository.Cliente.Interfaces;
type
IClienteService = interface
['{GUID-GERADO-PELO-IDE}']
function BuscarPorCodigo(ACodigo: Integer): TCliente;
procedure Salvar(const ACliente: TCliente);
procedure Excluir(ACodigo: Integer);
end;
TClienteService = class(TInterfacedObject, IClienteService)
strict private
FRepository: IClienteRepository;
public
constructor Create(ARepository: IClienteRepository);
function BuscarPorCodigo(ACodigo: Integer): TCliente;
procedure Salvar(const ACliente: TCliente);
procedure Excluir(ACodigo: Integer);
end;
implementation
constructor TClienteService.Create(ARepository: IClienteRepository);
begin
inherited Create;
FRepository := ARepository;
end;
function TClienteService.BuscarPorCodigo(ACodigo: Integer): TCliente;
begin
if ACodigo <= 0 then
raise EArgumentoInvalido.Create('Código de cliente inválido');
Result := FRepository.BuscarPorCodigo(ACodigo);
end;
procedure TClienteService.Salvar(const ACliente: TCliente);
begin
if not Assigned(ACliente) then Exit;
if ACliente.Nome.IsEmpty then
raise EClienteInvalido.Create('Nome do cliente é obrigatório');
FRepository.Salvar(ACliente);
end;
procedure TClienteService.Excluir(ACodigo: Integer);
begin
if ACodigo <= 0 then Exit;
FRepository.Excluir(ACodigo);
end;
end.