Skip to content

Diagnostics pt BR

Edgar Mesquita edited this page Aug 23, 2026 · 2 revisions

Diagnósticos

Todo erro e aviso de build que o eqc pode imprimir, com o que significa e o que fazer. Os códigos são estáveis: são por eles que você busca, e são eles que uma supressão nomeia.

Esta página vem da mesma referência que o repositório confere: docs/DIAGNOSTICS.md, mantida contra o compilador por DiagnosticsDocumentedTests. Um código que o compilador levanta e não tem linha aqui quebra a build, assim como uma linha que nomeia um código que não existe mais — e assim também um código que ganha um novo ponto de emissão, o que não é regra de estilo: o EQ2101 já foi dois erros sem relação (um template resx divergente e System.IO num componente cliente), cada um fixado pelo seu próprio teste verde, porque os dois nunca se encontravam numa mesma compilação.

Os diagnósticos saem no formato canônico do MSBuild, então a IDE e o dotnet build linkam ambos:

Pages/Counter.cs(14,9): error EQ2002: C# 'goto' cannot be transpiled to JavaScript …

EQ0xxx — o host de build

O próprio processo eqc, antes ou em volta de uma compilação.

Código Significado O que fazer
EQ0000 Um erro de compilação chegou sem código próprio. Leia a mensagem — o que falta é o código, não o diagnóstico.
EQ0001 O eqc quebrou. É bug do compilador. A mensagem traz a exceção; reporte com o fonte que a provocou.
EQ0002 A lista de referências do MSBuild está vazia, então o modelo semântico viria de uma compilação incompleta e argumentos nomeados poderiam sair na ordem errada. Reconstrua (dotnet build). Se persistir, o alvo CompileEQuanticUI rodou sem FindReferenceAssembliesForReferences.

EQ1xxx — a tradução ainda não existe

Uma lacuna do compilador, não do seu código. O construto é C# legal e poderia ser traduzido; hoje nada o faz. São os códigos que encolhem conforme o compilador cresce.

Código Significado O que fazer
EQ1001 Um tipo de expressão C# sem estratégia de transpilação. Reescreva numa forma transpilável, ou adicione uma estratégia de conversão para o construto.
EQ1002 Um tipo de statement C# sem estratégia. Idem.
EQ1003 Um C# (nem expressão nem statement) sem estratégia. Idem.
EQ1004 Uma estratégia casou com o construto, mas esta forma exata não tem emissão — a tradução sairia silenciosamente errada, então ela para. Reescreva a forma, ou adicione o caso que falta à estratégia.
EQ1005 Dois tipos dividem o mesmo nome de arquivo do twin — o mesmo nome duas vezes, ou dois nomes que diferem só em maiúsculas (um arquivo só no Windows e no macOS). Os twins seriam UM arquivo e o segundo sobrescreveria o primeiro. Renomeie um dos tipos.
EQ1006 (aviso) Um tipo está declarado em mais de um lugar e o eqc emite um módulo por declaração, então o twin fica só com os membros da primeira. Junte numa declaração só, ou mantenha juntos os membros que um componente usa. Inofensivo quando as outras metades são server-only, e é por isso que não para a build.

EQ2001–EQ2009 — o construto não atravessa

Não é lacuna: não há equivalente no browser, ou a tradução teria de ser um palpite. Estes não encolhem com trabalho no compilador — são o formato do alvo.

Código Significado O que fazer
EQ2001 Um construto C# sem equivalente em runtime no browser (intrínsecos de typed reference: __makeref, __reftype, __refvalue, stackalloc, ponteiros). Reestruture sem ele.
EQ2002 goto. Reestruture com laços e condicionais, ou um break/continue rotulado (esses TRADUZEM).
EQ2003 new T() sobre parâmetro de tipo — argumentos genéricos são apagados em runtime no JavaScript, então o tipo concreto é desconhecido. Passe uma fábrica (Func<T>) ou o valor já construído.
EQ2004 Um método de extensão cuja classe declarante não faz parte desta compilação, então nada o emite. Use um membro de instância, ou traga o fonte declarante para a compilação.
EQ2005 Um iterador infinito. Iteradores são MATERIALIZADOS num array, então o laço rodaria para sempre em vez de render preguiçosamente. Dê um fim ao laço (um limite, um yield break), ou consuma o que precisa dentro do método.
EQ2006 O membro não vincula no modelo semântico, então qualquer tradução seria palpite. Ou o código não compila, ou faltam referências / fontes gerados ao eqc. Nunca é adivinhado — veja Compilador.
EQ2007 Um argumento with(…) de collection expression além da dica de capacidade — um array ou Set de JS não recebe comparador no construtor. Remova o argumento, ou construa a coleção explicitamente.
EQ2008 Query syntax com join, let, um segundo from ou into — a tradução em C# passa por identificadores transparentes gerados pelo compilador. Também as formas cercadas de inicializador. Reescreva em method syntax, onde todo operador é suportado.
EQ2009 Um componente declarado mais de uma vez num arquivo (declarações parciais). O eqc emite um módulo por declaração e não sabe fundi-las. Junte os membros numa declaração só.

EQ2100–EQ2101 — templates resx

O contrato de localização, conferido na máquina de build em vez de quando um visitante chega.

Código Significado O que fazer
EQ2100 Sobre esta chamada: o template precisa ser um composite format válido cujos especificadores estejam dentro do subconjunto suportado, e a chamada precisa passar todos os buracos declarados. Corrija a contagem de argumentos, ou tire o especificador fora do subconjunto (alinhamento como {0,10} está fora do v1).
EQ2101 Sobre as traduções: o resx de cada cultura é conferido contra o neutro, que é o contrato de aridade. Corrija o template da cultura — um {n} a mais ou a menos quebra a build, não a página.

EQ2102–EQ2107, EQ2112 — a fronteira cliente/servidor

Um componente cliente buscou uma API que só existe num servidor. A ponte é [ServerAction].

Código Significado
EQ2102 Acesso direto a banco (Microsoft.EntityFrameworkCore, System.Data).
EQ2103 Rede (System.Net.Http, System.Net.Sockets).
EQ2104 Threading e locking do SO (Thread, Monitor, Mutex, Semaphore — não Task).
EQ2105 Criação de processos (System.Diagnostics.Process).
EQ2106 Interop nativo / P-Invoke (System.Runtime.InteropServices).
EQ2107 Geração de IL em runtime (System.Reflection.Emit).
EQ2112 Acesso ao sistema de arquivos (System.IO).

O EQ2112 fica separado da família de propósito: System.IO era reportado como EQ2101 até esse código se revelar pertencente à checagem de resx acima, que a wiki já publicava. Não é um deslize de numeração para arrumar de volta.

EQ2108–EQ2111 — um significado por alvo, ou nenhum

O construto traduz, mas seria LIDO de forma diferente no servidor e no browser. Em vez de escolher por você, o eqc pergunta.

Código Significado O que fazer
EQ2108 Um CultureInfo que não é InvariantCulture nem CurrentCulture — só esses dois atravessam. Formate com especificador explícito (ToString("N2") segue a cultura da app nos dois alvos), ou converta com a cultura invariante.
EQ2109 ToString(CultureInfo.CurrentCulture) sem especificador — o formato geral está fora do subconjunto de Intl testado. Nomeie o formato: ToString("N2"), ToString("F1").
EQ2110 Um número fracionário convertido sem cultura nenhuma: o C# segue a cultura da request (vírgula, em pt) e o JavaScript é sempre invariante. Diga qual você quer.
EQ2111 GetService sem argumento de tipo para atravessar — o registro é chaveado pelo NOME da interface, e aqui não há nada para chavear. Chame a sobrecarga genérica.
EQ2113 O ConfigureAwait é descartado — só existe um contexto onde retomar — e descartá-lo jogaria fora um argumento NÃO-CONSTANTE sem avaliá-lo. Passe uma constante, ou avalie a expressão numa variável local antes.

EQ3001–EQ3003 — o gerador de app Photon

Código Significado
EQ3001 Uma app Photon sem programa.
EQ3002 Uma app Photon com mais de um programa.
EQ3003 A razão de uma capacidade precisa ser constante.

EQ3101–EQ3105 — os source generators

A superfície de factories gerada e os modelos de formulário.

Código Significado
EQ3101 Um componente elege mais de um construtor de factory ([UiFactory]).
EQ3102 Dois componentes dividem o mesmo nome.
EQ3103 Uma propriedade de form model tem tipo que nenhuma caixa de texto comporta.
EQ3104 Um atributo de validação sem regra em que virar.
EQ3105 Um [Compare] nomeia uma propriedade que este formulário não tem.

Clone this wiki locally