salesforce-apex-quality
Ajuda seu agente a garantir a qualidade e segurança do código Apex no Salesforce. Ele verifica regras importantes para evitar problemas de limites e segurança.
O que ela faz
Esta ferramenta ajuda a garantir que o código escrito para a plataforma Salesforce seja seguro e eficiente. Ela verifica se há erros comuns que podem causar problemas de desempenho ou segurança, como fazer muitas operações de banco de dados de uma vez ou não verificar se o usuário tem permissão para acessar certos dados.
Quando usar
- ✓Ao escrever ou revisar código Apex para Salesforce.
- ✓Quando você quer evitar erros de limite de operação do Salesforce.
- ✓Para garantir que o código respeita as permissões de usuário (segurança).
Exemplo do que pedir para a IA
“Revise este código Apex para garantir que ele segue as melhores práticas de segurança e limites do Salesforce.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta analisa seu código em busca de padrões conhecidos que causam problemas. Por exemplo, ela verifica se você está fazendo consultas ao banco de dados ou atualizando informações dentro de um loop, o que é ineficiente e pode travar o sistema. Ela também verifica se o código está configurado para respeitar as permissões de quem o executa.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add github/awesome-copilot --skill salesforce-apex-qualityOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/salesforce-apex-quality/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Salesforce Apex Quality Guardrails
Aplique estas verificações a todas as classes, triggers e arquivos de teste Apex que você escrever ou revisar.
Etapa 1 — Verificação de Segurança de Limites do Governador
Analise estes padrões antes de declarar qualquer arquivo Apex como aceitável:
SOQL e DML em Loops — Falha Automática
// ❌ NEVER — causes LimitException at scale
for (Account a : accounts) {
List<Contact> contacts = [SELECT Id FROM Contact WHERE AccountId = :a.Id]; // SOQL in loop
update a; // DML in loop
}
// ✅ ALWAYS — collect, then query/update once
Set<Id> accountIds = new Map<Id, Account>(accounts).keySet();
Map<Id, List<Contact>> contactsByAccount = new Map<Id, List<Contact>>();
for (Contact c : [SELECT Id, AccountId FROM Contact WHERE AccountId IN :accountIds]) {
if (!contactsByAccount.containsKey(c.AccountId)) {
contactsByAccount.put(c.AccountId, new List<Contact>());
}
contactsByAccount.get(c.AccountId).add(c);
}
update accounts; // DML once, outside the loop
Regra: se você vir [SELECT ou Database.query, insert, update, delete, upsert, merge dentro do corpo de um loop for — pare e refatore antes de prosseguir.
Etapa 2 — Verificação do Modelo de Compartilhamento
Cada classe deve declarar sua intenção de compartilhamento explicitamente. Compartilhamento não declarado herda do chamador — comportamento imprevisível.
| Declaração | Quando usar |
|---|---|
public with sharing class Foo |
Padrão para todas as classes de serviço, handler, selector e controller |
public without sharing class Foo |
Apenas quando a classe precisar ser executada com privilégios elevados (por exemplo, logging em nível de sistema, bypass de trigger). Requer um comentário de código explicando o motivo. |
public inherited sharing class Foo |
Pontos de entrada de framework que devem respeitar o contexto de compartilhamento do chamador |
Se uma classe não tiver uma dessas três declarações, adicione-a antes de escrever qualquer outra coisa.
Etapa 3 — Aplicação de CRUD / FLS
O código Apex que lê ou escreve registros em nome de um usuário deve verificar o acesso a objetos e campos. A plataforma não aplica FLS ou CRUD automaticamente no Apex.
// Check before querying a field
if (!Schema.sObjectType.Contact.fields.Email.isAccessible()) {
throw new System.NoAccessException();
}
// Or use WITH USER_MODE in SOQL (API 56.0+)
List<Contact> contacts = [SELECT Id, Email FROM Contact WHERE AccountId = :accId WITH USER_MODE];
// Or use Database.query with AccessLevel
List<Contact> contacts = Database.query('SELECT Id, Email FROM Contact', AccessLevel.USER_MODE);
Regra: qualquer método Apex chamável de um componente de UI, endpoint REST ou @InvocableMethod deve aplicar CRUD/FLS. Métodos de serviço internos chamados apenas de contextos confiáveis podem usar with sharing em vez disso.
Etapa 4 — Prevenção de Injeção de SOQL
// ❌ NEVER — concatenates user input into SOQL string
String soql = 'SELECT Id FROM Account WHERE Name = \'' + userInput + '\'';
// ✅ ALWAYS — bind variable
String soql = [SELECT Id FROM Account WHERE Name = :userInput];
// ✅ For dynamic SOQL with user-controlled field names — validate against a whitelist
Set<String> allowedFields = new Set<String>{'Name', 'Industry', 'AnnualRevenue'};
if (!allowedFields.contains(userInput)) {
throw new IllegalArgumentException('Field not permitted: ' + userInput);
}
Etapa 5 — Idiomas Modernos do Apex
Prefira recursos atuais da linguagem (API 62.0 / Winter '25+):
| Padrão antigo | Substituição moderna |
|---|---|
if (obj != null) { x = obj.Field__c; } |
x = obj?.Field__c; |
x = (y != null) ? y : defaultVal; |
x = y ?? defaultVal; |
System.assertEquals(expected, actual) |
Assert.areEqual(expected, actual) |
System.assert(condition) |
Assert.isTrue(condition) |
[SELECT ... WHERE ...] sem contexto de compartilhamento |
[SELECT ... WHERE ... WITH USER_MODE] |
Etapa 6 — Checklist de Cobertura de Teste PNB
Cada funcionalidade deve ser testada em todos os três caminhos. A falta de qualquer um deles é uma falha de qualidade:
Caminho Positivo
- Entrada esperada → saída esperada.
- Afirme os valores exatos dos campos, contagens de registros ou valores de retorno — não apenas que nenhuma exceção foi lançada.
Caminho Negativo
- Entrada inválida, valores nulos, coleções vazias e condições de erro.
- Afirme que exceções são lançadas com o tipo e mensagem corretos.
- Afirme que nenhum registro foi mutado quando a operação deveria ter falhado de forma limpa.
Caminho em Massa
- Insira/atualize/exclua 200–251 registros em uma única transação de teste.
- Afirme que todos os registros foram processados corretamente — sem falhas parciais devido a limites do governador.
…
Perguntas frequentes
O que são 'limites do governador'?
São regras do Salesforce que limitam a quantidade de processamento que um código pode fazer para garantir que a plataforma funcione bem para todos os usuários.
O que é 'SOQL/DML em loops'?
É quando você faz uma consulta (SOQL) ou uma operação de escrita (DML como inserir, atualizar, deletar) repetidamente dentro de um loop. Isso consome muitos recursos e geralmente é proibido.
O que significa 'segurança CRUD/FLS'?
CRUD (Create, Read, Update, Delete) é sobre permissão para criar, ler, atualizar ou deletar registros. FLS (Field-Level Security) é sobre permissão para acessar campos específicos dentro de um registro. O código deve verificar se o usuário tem essas permissões.
Detalhes
Descrição original do autor
Apex code quality guardrails for Salesforce development. Enforces bulk-safety rules (no SOQL/DML in loops), sharing model requirements, CRUD/FLS security, SOQL injection prevention, PNB test coverage (Positive / Negative / Bulk), and modern Apex idioms. Use this skill when reviewing or generating Apex classes, trigger handlers, batch jobs, or test classes to catch governor limit risks, security ga
repo: github/awesome-copilot
Popularidade
- Estrelas no GitHub
- 40 mil
- Posição no ranking
- #5355
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
acquire-codebase-knowledge
Ajuda seu agente a entender e documentar um projeto de código existente. É útil para novas pessoas entrarem no projeto ou para ter uma visão geral da arquitetura.
github/awesome-copilot
acreadiness-assess
Faz seu agente avaliar a prontidão de um projeto para IA e gerar um relatório. É útil para entender o quão bem um projeto está preparado para usar ferramentas de IA.
github/awesome-copilot
acreadiness-generate-instructions
Ajuda seu agente a criar instruções para ferramentas de IA baseadas em uma avaliação. É útil para melhorar a forma como a IA interage com o código e fecha lacunas identificadas.
github/awesome-copilot
acreadiness-policy
Faz seu agente ajudar a definir ou aplicar políticas para avaliação de projetos de IA. É útil para padronizar a forma como os projetos são avaliados e garantir conformidade.
github/awesome-copilot
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC