Skip to content

Fatal error na v3.5.0: enum gerado com case duplicado (ConsultaCteV2/DFe_NetCore_Domain_Enums_EntityStatus) #39

Description

@andrenfe

Resumo

Generated/ConsultaCteV2/DFe_NetCore_Domain_Enums_EntityStatus.php declara dois cases com o mesmo nome no mesmo enum. Não é um aviso: o arquivo não compila, e qualquer coisa que carregue a classe morre com Fatal error.

Verificado na v3.5.0.

O código

enum DFe_NetCore_Domain_Enums_EntityStatus: int
{
    case Value_0 = 0;
    case Value_1 = 1;
    case Value_1 = -1;   // <-- mesmo nome do case anterior
}
Fatal error: Cannot redefine class constant
Nfe\Generated\ConsultaCteV2\DFe_NetCore_Domain_Enums_EntityStatus::Value_1
in .../DFe_NetCore_Domain_Enums_EntityStatus.php on line 15

A causa aparente é o gerador nomear o case a partir do valor sem considerar o sinal: 1 e -1 colidem em Value_1.

Como reproduzir

docker run --rm -v "$PWD/vendor/nfe/nfe":/sdk php:8.2-cli \
  php -l /sdk/src/Generated/ConsultaCteV2/DFe_NetCore_Domain_Enums_EntityStatus.php

Varri src/ inteiro: este é o único arquivo com erro fatal — os demais compilam.

Impacto

Não afeta quem usa NFS-e, porque a classe pertence à consulta de CT-e e nunca é autoloada. Mas atinge:

  • --classmap-authoritative, o modo recomendado para empacotar o SDK dentro de um plugin WordPress: o classmap referencia a classe, e qualquer caminho que a resolva fatal.
  • Lint de árvore completa em CI (php -l em src/), que passa a falhar.
  • Análise estática (PHPStan e afins).
  • Qualquer consumidor que realmente use ConsultaCteV2, para quem a funcionalidade simplesmente não existe.

Encontrei isso justamente validando o pacote de distribuição do plugin, onde o lint de todos os 781 arquivos PHP era o gate.

Sugestão

Duas coisas, independentes:

  1. Corrigir a nomeação de cases no gerador para valores negativos — por exemplo Value_minus_1, Value_Neg1, ou o nome semântico do enum quando o OpenAPI o fornece.
  2. Adicionar ao pipeline de geração um passo que roda php -l em cada arquivo emitido e falha o build. Este defeito seria pego na hora, e a linha 3.0–3.4.0 (79 arquivos com type-hints malformados, corrigidos no 3.4.1) sugere que a família de problema já se repetiu.

Contexto

Encontrado ao empacotar o plugin nfe/woo-nfe com o nfe/nfe 3.5. Relacionado, mas distinto, do #36 (deprecations em ConsultaNfeDistribuicaoV1).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions