Boas Práticas com PHPCS no WordPress

Por

em


1. Objetivo

Esta documentação descreve as melhorias implementadas no fluxo de verificação de padrão de código PHP no projeto, utilizando PHPCS, hooks de pré-commit e scripts auxiliares, além de consolidar boas práticas para desenvolvimento WordPress. O objetivo é garantir qualidade, consistência e manutenibilidade do código do projeto.


2. Implementações

2.1 Hooks de Pré-Commit

  • O hook de pré-commit roda automaticamente o script phpcs-pre-commit.sh antes de qualquer commit.
  • Função principal: garantir que todos os arquivos PHP modificados sigam o padrão de código definido.
  • Benefícios:
    • Evita envio de código fora do padrão para o repositório.
    • Permite detecção antecipada de inconsistências.

Exemplo de configuração do hook (em .git/hooks/pre-commit):

#!/bin/sh
# Executa o PHPCS apenas nos arquivos alterados
bash .scripts/phpcs-pre-commit.sh

Exemplo de uso no fluxo de trabalho:

# Modificação de arquivos PHP via terminal ou IDE
git add plugins/cnn-editorial-analyzer/cnn-editorial-analyzer.php

# Tentativa de commit
git commit -m "Corrige validação de inputs no plugin Editorial Analyzer"

Nesse momento, o hook será executado automaticamente:

  • Se o código não estiver de acordo com os padrões, o commit será bloqueado e o desenvolvedor verá as recomendações do PHPCS no terminal.
  • Se o código estiver correto (ou após correções com composer phpcs-style-fix), o commit será concluído normalmente.

2.2 Scripts Composer

Verificar recomendações de estilo

Exemplos de uso:

  • composer phpcs-style
    • Verifica apenas as linhas alteradas nos arquivos incluídos no commit, utilizando o phpcs-changed
  • composer phpcs-style plugins/cnn-editorial-analyzer/cnn-editorial-analyzer.php
    • Verifica somente as linhas alteradas de um único arquivo incluído no commit, utilizando o phpcs-changed.

Executa a verificação de arquivos PHP modificados adicionados ao commit, garantindo que estejam de acordo com o padrão de código definido:

bash .scripts/phpcs-diff-check.sh

Aplicar recomendações de estilo automaticamente

  • composer phpcs-style-fix
    • Permite corrigir automaticamente todos arquivos adicionados ao commit
  • composer phpcs-style-fix plugins/cnn-editorial-analyzer/cnn-editorial-analyzer.php
    • Permite corrigir automaticamente um arquivo específico adicionados ao commit

⚠️ Importante: o fixer atua sobre o arquivo inteiro, não apenas nas alterações recentes. Isso ocorre porque, ao modificar apenas linhas específicas, o fixer não teria o contexto necessário das demais partes do arquivo para garantir a consistência da formatação:

bash .scripts/phpcs-diff-fix.sh

Esses scripts permitem integração direta com o fluxo de desenvolvimento, evitando a execução manual de comandos complexos e garantindo consistência no código.


2.3 PHPCS Diffs

  • O script foi configurado para analisar apenas arquivos PHP modificados (git diff).
  • Benefícios:
    • Redução significativa do tempo de execução.
    • Foco apenas nas alterações recentes, mantendo a produtividade do desenvolvedor.

2.4 Novas Regras de Padrão de Código

As regras abaixo foram configuradas para garantir consistência, legibilidade e aderência aos padrões VIP e PSR-12 no código PHP do projeto:

Padrões VIP e WordPress

  • WordPress-VIP-Go e WordPressVIPMinimum: seguem recomendações de código do VIP Coding Standards.

Formatação e estilo (PSR-12)

  • Aplica regras de formatação e estilo do PSR-12.
  • Padroniza espaçamento, indentação e limites de linha.

Nomenclatura

  • Variáveis e funções devem estar em camelCase.
  • Classes e métodos seguem padrões claros de identificação.

DocBlocks e comentários

  • Funções e classes devem ter DocBlocks com @param e @return, melhorando documentação e tipagem.
  • Obs: Use extensões da IDE para facilitar o preenchimento das informações

Arrays

  • Uso de [] obrigatório, evitando array() antigo.
  • Padronização de indentação em arrays multilinha.
  • Espaçamento interno consistente dentro de [].

Limites de linhas

  • Limite recomendado: 120 caracteres.
  • Limite absoluto: 180 caracteres.

Estruturas de controle

  • Padronização de if, for, while e switch.
  • Uso obrigatório de elseif em vez de else if.
  • Proíbe múltiplas instruções na mesma linha.
  • Espaçamento interno consistente e alinhamento correto das chaves.

Classes e funções

  • Alinhamento, posição de chaves e espaçamento validados.
  • Declarações multilinha de funções validadas quanto à indentação.

Indentação e espaços

  • Tabs proibidos, uso de espaços obrigatórios.
  • Controle de indentação em blocos de código e escopos.
  • Espaçamento entre argumentos em funções validado.

3. Boas Práticas para WordPress

3.1 Padrões de Desenvolvimento

  • Namespaces e PSR-4 para autoload de classes.
  • Classes específicas com sufixos claros: Entity, Repository, Service.
  • Funções e variáveis em camelCase.

3.2 Segurança

  • Sempre sanitizar e validar inputs (sanitize_text_field, wp_kses, etc.).
  • Escapar saídas (esc_html, esc_attr, wp_kses_post).
  • Usar nonces para validação de formulários.

3.3 Manutenção e Testes

  • Cobertura mínima de testes unitários e de integração para funcionalidades críticas.
  • Revisões de código obrigatórias em Pull Requests.
  • Documentação clara dos hooks e endpoints.

3.4 Performance

  • Evitar queries diretas sem necessidade.
  • Cachear resultados quando possível (transients, object cache, Redis).
  • Minimizar hooks e filtros desnecessários.
  • Nunca implementar consultas ou lógicas em um construtor