Pular para o conteúdo

Referência de Diagnósticos

Todos os erros, avisos e lints emitidos pelo conjunto de ferramentas do Zolo. Clique em um código para ver a explicação completa, a causa típica e a correção recomendada.

com explicação completa 174/208
Referência de Diagnósticos 208
01

Lint

24
float-equality
Comparando floats com `==` ou `!=`

A igualdade entre floats é imprecisa. Use `~=` (tolerância adaptativa), `!~=`, ou `math.approx_eq_abs/_rel(...)`. Para comparações exatas, use o tipo `decimal`.

unused-variable
Variável não utilizada

Uma variável `let` ou parâmetro nunca é lida. Prefixe o nome com `_` para silenciar o lint intencionalmente.

unused-function
Função não utilizada

Uma função top-level nunca é chamada e não está marcada com `pub`, `@test`, `@bench`, `@export`, rota HTTP ou `main`.

unused-import
Import não utilizado apenas resumo

Um nome importado nunca é referenciado no arquivo.

shadowed-variable
Variável faz shadowing de um binding externo apenas resumo

Um `let` re-vincula um nome de um escopo externo. Shadowing às vezes é intencional; renomeie um dos bindings para silenciar o aviso.

dead-code
Código morto após instrução terminal apenas resumo

Código depois de `return`, `break` ou `continue` é inalcançável.

naming-convention
Violação da convenção de nomes

Funções/variáveis usam `snake_case`; structs/enums/traits/efeitos usam `PascalCase`.

non-exhaustive-match
Match não exaustivo (lint legado, não emitido)

Alias legado: matches fechados agora são verificados uma vez pelo type checker como `TE829`. Mantido para que links antigos tenham destino.

must-use
Valor `@must_use` descartado apenas resumo

Uma função ou tipo anotado com `@must_use` retornou um valor que o chamador descartou. Vincule-o (`let _ = ...`) ou consuma-o.

deprecated
Uso de item deprecated apenas resumo

Uma função anotada com `@deprecated` foi chamada. A mensagem da anotação explica a substituição.

infinite-loop
Loop infinito sem saída apenas resumo

Um bloco `loop`/`while true` não tem nenhum `break`/`return` alcançável.

optional-typo
Provável erro de digitação em acesso opcional apenas resumo

Um uso de `Some(...)` / `None` / `?.` / `??` que parece um erro de digitação ou mau uso da API de opcional.

unreachable-pattern
Braço de `match` inalcançável apenas resumo

Um padrão nunca casa porque um braço anterior já o cobre.

max-line-length
Linha excede o comprimento máximo configurado apenas resumo

Configurado via lint config do projeto. O padrão é permissivo; aperte no CI se quiser limites rígidos.

max-nesting-depth
Bloco aninhado além do permitido apenas resumo

Aninhamento profundo prejudica a legibilidade. Extraia helpers ou use guard clauses com return cedo.

max-parameters
Função com parâmetros demais apenas resumo

Listas longas de parâmetros são um code-smell. Considere agrupar parâmetros relacionados em uma struct.

max-function-length
Corpo da função excede o comprimento configurado apenas resumo

Quebre a função em helpers menores.

unknown-repr
Política `@repr(...)` desconhecida apenas resumo

Apenas `@repr(C)`, `@repr(packed)`, `@repr(transparent)` e `@repr(zolo)` são reconhecidos.

transparent-multi-field
`@repr(transparent)` em struct com múltiplos campos apenas resumo

`transparent` só se aplica a structs newtype com um único campo.

layout-in-default-repr
`@layout(...)` em struct com repr padrão apenas resumo

`@layout` só tem efeito junto com um `@repr` explícito.

align-not-positive
`@layout(align = ...)` deve ser positivo apenas resumo

Alinhamento deve ser uma potência de dois positiva.

align-not-power-of-two
`@layout(align = ...)` deve ser potência de dois apenas resumo

Regras de alinhamento de hardware exigem valores que sejam potência de dois (1, 2, 4, 8, ...).

align-too-large
Valor de `@layout(align = ...)` muito grande apenas resumo

O alinhamento solicitado excede o máximo suportado pela plataforma alvo.

size-not-positive
`@layout(size = ...)` deve ser positivo apenas resumo

O tamanho não pode ser zero nem negativo.

02

Parser

05
03

Tipos

162
E0001
Incompatibilidade de tipos (legado) apenas resumo

Equivalente a `TE001`. Emitido pelo classificador legado quando o novo typeck não anexou um código.

E0002
Variável indefinida (legado) apenas resumo

Alias legado para `TE100`.

E0003
Função indefinida / não chamável (legado) apenas resumo

Alias legado para `TE101`.

E0004
Não é possível reatribuir (legado) apenas resumo

Alias legado para `TE004`. A variável foi declarada com `let`; use `let mut` para permitir reatribuição.

E0005
Campo indefinido (legado) apenas resumo

Alias legado para `TE102`.

E0006
Campo ausente apenas resumo

Um literal de struct omite um ou mais campos obrigatórios.

E0007
Número incorreto de argumentos (legado) apenas resumo

Alias legado para `TE110`.

E0008
Tipo de retorno incompatível apenas resumo

O valor retornado não corresponde ao tipo de retorno declarado pela função.

E0009
Declaração duplicada apenas resumo

Um nome (função, variável, campo, variante) foi declarado duas vezes no mesmo escopo.

E0010
Tipo desconhecido apenas resumo

Uma anotação de tipo se refere a um tipo que o compilador não consegue encontrar.

TE001
Incompatibilidade de tipo em `let`

O valor atribuído a um binding `let` não satisfaz a anotação de tipo declarada.

TE002
Incompatibilidade de tipo em `const`

O valor atribuído a um binding `const` não satisfaz a anotação de tipo declarada.

TE003
Valor de `const` não é constante em tempo de compilação

`const` exige uma expressão constant-foldable. Use `let` para valores de runtime.

TE004
Não é possível reatribuir um binding imutável

Bindings `let` são imutáveis por padrão. Use `let mut x = ...` para permitir reatribuição, ou crie um novo binding com shadowing via `let`.

TE005
Atribuição composta em valor não numérico

Operadores como `+=`, `-=`, `*=` exigem que ambos os lados sejam numéricos (ou strings, para `+=`).

TE006
Aridade de retorno múltiplo (faltam valores)

A função declarou um retorno em tupla, mas a instrução `return` fornece menos valores.

TE007
Aridade de retorno múltiplo (excesso de valores)

A função retorna mais valores do que seu tipo de retorno único pode comportar.

TE008
Tipo de elemento de array incompatível

Um literal de array mistura tipos incompatíveis; arrays são homogêneos.

TE009
Aritmética entre tipos incompatíveis

Aritmética binária exige que ambos os operandos sejam numéricos e (em modo strict) do mesmo tipo numérico.

TE100
Variável indefinida

O nome não está declarado em nenhum escopo envolvente. O compilador anexa uma sugestão "quis dizer?" quando existe um nome similar.

TE101
Chamando um valor que não é função

O alvo de uma expressão de chamada não é um tipo invocável.

TE102
Struct não tem esse campo

A struct não declara este campo. Sugestões "quis dizer?" são anexadas para nomes similares.

TE103
Nome de tipo desconhecido

Uma anotação de tipo ou campo de variante de enum se refere a um tipo que o compilador não consegue resolver.

TE104
Método inexistente

O tipo receptor não tem um método com esse nome. Verifique a grafia, os imports e a visibilidade do trait.

TE105
Módulo da stdlib usado sem `use std::…`

Um nome simples corresponde a um módulo conhecido da biblioteca padrão (`math`, `json`, `http`, `os`, …) que nunca foi trazido ao escopo. Diferente do TE100, o compilador reconhece o nome e diz exatamente qual linha `use` está faltando.

TE107
Campo faltando na construção do struct

Um literal de struct omite um campo que não tem valor padrão nem zero-value de fallback. Todo campo sem default precisa ser fornecido explicitamente na construção.

TE108
Não é possível derivar `Default`: campo sem padrão

Um struct com `@derive(Default)` tem um campo cujo tipo não possui zero-value nem default explícito, então nenhuma impl de `Default` pode ser sintetizada.

TE109
Não é possível inferir o tipo do campo pelo padrão

Um campo de struct foi escrito sem anotação de tipo, contando com o valor padrão para inferi-lo (`nome = valor`) — mas o tipo do padrão é ambíguo (ex.: `nil`, ou uma expressão que resolve para `any`).

TE110
Aridade incorreta na chamada do método

O número de argumentos passados não corresponde à quantidade de parâmetros da função.

TE111
Tipo de argumento incompatível em chamada de método

O tipo de um argumento não corresponde ao tipo do parâmetro correspondente.

TE112
Campo embutido por `using` é ambíguo

Dois ou mais campos embutidos com `using` declaram um campo de mesmo nome, então um acesso `.campo` no struct externo não sabe de qual embed promovê-lo.

TE113
Campo `using` precisa embutir um struct

Um campo marcado com `using` precisa embutir outro struct — são os campos dele que são promovidos. Um escalar, ou qualquer tipo que não seja uma declaração de struct conhecida, não tem campos a promover.

TE114
Enum com discriminantes numéricos não pode ser genérico

Um enum optou por discriminantes numéricos (tipo de backing, ou um `= n` explícito) mas é genérico ou tem variante com payload. Discriminantes só fazem sentido para enums planos, com todas as variantes unitárias.

TE115
Discriminante não cabe no tipo de backing

O discriminante de uma variante está fora da faixa do tipo de backing declarado (`enum E: u8` limita a `0..=255`), então não sobreviveria ao ida-e-volta de `to_int()`/`from_int()`.

TE116
Valor de discriminante duplicado

Duas variantes do mesmo enum resolveram para o mesmo inteiro — ou dois `= n` explícitos colidem, ou um valor auto-incrementado caiu em cima de um já usado.

TE117
Enum `@stable` exige discriminante explícito

Sob `@stable` o auto-incremento é proibido: inserir uma variante no meio renumeraria silenciosamente todas as seguintes, quebrando a codificação que a anotação promete manter.

TE118
Discriminante precisa ser constante inteira

O discriminante `= expr` de uma variante ou não avaliou para inteiro em tempo de compilação, ou não pôde ser avaliado como constante de compilação.

TE119
Enum `@flags` precisa ser plano e não-genérico

Um enum `@flags` é genérico ou tem variante com payload. `@flags` modela uma bitmask sobre um conjunto fixo e plano de variantes unitárias — não há espaço para parâmetros de tipo ou payloads.

TE120
Valor de flag precisa ser potência de dois ou composto

Cada variante `@flags` precisa ser um bit novo (auto-incrementado ou potência de dois explícita) ou um composto nomeado construído só a partir de bits declarados acima dela.

TE121
Valor de flag não cabe no tipo de backing

O valor de uma flag está fora da faixa do tipo de backing do enum — flags em `enum: u8` param em `255` (bit 7).

TE122
Duas flags ocupam o mesmo bit

Duas flags de bit único no mesmo enum `@flags` resolveram para o mesmo bit, normalmente porque receberam o mesmo valor explícito.

TE123
Campo inexistente no padrão de destructuring

Um padrão de destructuring — `let Struct { … } = expr`, um `let { … }` anônimo, um padrão de parâmetro ou uma atribuição com destructuring de struct — nomeia um campo que o struct não tem.

TE124
Bloco `let … else` precisa divergir

O bloco `else` pode cair para fora. Se caísse, a execução seguiria para os bindings do padrão com um valor que NÃO casou — por isso todo caminho pelo `else` precisa retornar, panicar, quebrar ou continuar.

TE125
Padrão refutável em `let` exige `else`

O padrão pode não casar (padrão de variante de enum, padrão de tamanho de array, …) e não tem cláusula `else`. Sem ela, um valor que não casa ligaria lixo silenciosamente.

TE126
Não é possível inferir o struct por trás de `let { … }`

Um padrão de struct anônimo precisa saber qual struct está desestruturando, mas o tipo do valor não resolve para um struct concreto — normalmente por falta de anotação de tipo.

TE127
Struct do padrão de parâmetro não bate com a anotação

Um padrão de struct nomeado em posição de parâmetro (`fn f(NomeStruct { … }: T)`) nomeia um struct diferente da anotação de tipo do próprio parâmetro.

TE128
Origem do spread precisa ser struct ou record

O spread final de um literal de struct (`Struct { ..origem }`) tem uma `origem` que não é struct nem record, então não há campos a espalhar.

TE129
Quantidade de valores incompatível na atribuição de tupla

Uma atribuição com destructuring de tupla (`(a, b, c) = expr`) tem um número de alvos diferente do número de valores de `expr`.

TE130
Atribuição com destructuring só aceita `=`

Operadores compostos (`+=`, `-=`, …) não têm significado por elemento quando o lado esquerdo é um padrão inteiro, e o spread `..` não faz sentido como alvo de atribuição.

TE131
Chamada com argumento nomeado não pode ser reordenada

Um argumento nomeado (`f(nome: valor)`) não corresponde aos parâmetros declarados da função chamada — nome desconhecido ou duplicado, um argumento posicional depois de um nomeado, um parâmetro do meio pulado, ou uma chamada cuja assinatura não é conhecida localmente.

TE132
Placeholder `_` inválido

O placeholder `_` só é válido como argumento direto na chamada do lado direito (RHS) de um estágio de pipe `|>`/`?>` (no máximo um por estágio), ou como a cabeça de uma cadeia de campo/método/índice usada como argumento de chamada (`_.campo`). Um `_` solto, um segundo `_` no mesmo estágio de pipe, ou `_` como lado esquerdo de um pipe são todos rejeitados.

TE133
Variante de enum desconhecida

Um enum real e declarado foi identificado para este ponto — como base de `EnumName::variante`, ou como tipo do valor testado por um pattern com atalho `.variante` — mas o nome da variante não corresponde a nenhuma variante declarada. Uma sugestão "quis dizer?" é incluída na mensagem quando existe um nome próximo.

TE134
Nome do prelúdio da VM não tem implementação nativa

O nome faz parte do prelúdio sempre-em-escopo da VM, mas o backend native/LLVM não tem implementação para ele. Compilar assim mesmo faria o nome virar `nil` silenciosamente e sair com 0 — por isso o build falha.

TE135
Nome desconhecido não tem binding nativo

Check exclusivo de native/LLVM: um identificador simples não resolveu para nada. Sem prelúdio Lua de fallback, ele viraria `nil` silenciosamente em runtime — a classe "typo vira no-op quieto" que isso pega em tempo de build.

TE136
Não é possível inferir o enum de um atalho `.Variante`

O atalho `.Variante` descobre seu enum a partir do tipo esperado pela posição onde aparece, e esta posição não fornece nada utilizável — nenhum tipo esperado (um `let` sem anotação, um argumento de uma função cuja assinatura não é conhecida), um parâmetro genérico ainda não fixado, ou um tipo que não é um enum. Anote a variável ou escreva a forma qualificada `Enum::Variante`.

TE137
Variante desconhecida em um atalho `.Variante`

O atalho `.Variante` resolveu seu enum a partir do tipo esperado pela posição, mas esse enum não tem nenhuma variante com esse nome. Uma sugestão "quis dizer?" é incluída quando existe um nome próximo. A forma de pattern do mesmo erro reporta `TE133` em vez deste código.

TE138
Colisão de prefixo do linker de decl-module ou referência não suportada

Um build native/LLVM não conseguiu unir (splice) um módulo de declaração: ou uma declaração do usuário começa com o prefixo `__zolo_std_`, reservado pelo compilador, ou uma função alcançável do módulo de declaração referencia um item irmão que o linker não consegue levar ao programa final. Qualquer um dos casos deixaria o build AOT divergir silenciosamente da VM.

TE139
Raw text element `<style>`/`<script>` sem fechamento

`<style>` e `<script>` são raw text elements: o conteúdo corre verbatim até o `</style>`/`</script>` correspondente, sem markup aninhado e sem interpolação `{expr}`. Chegar ao fim do arquivo antes desse fechamento reporta TE139 em vez da mensagem genérica "unclosed element" — geralmente uma tag de fechamento esquecida, ou uma string no formato `</tag` dentro do conteúdo (por exemplo, um literal de string JS) que fechou o bloco cedo demais.

TE140
Recipe do Resource Graph não pôde ser selada

Uma recipe do Resource Graph em tempo de build (`Resource.dir(...).seal()`) não pôde ser selada em sua Resource Image imutável — um caminho ausente ou que não é diretório, um padrão `include` que não casou com nada, um caminho que escapa da raiz do recurso, uma colisão de caminho lógico, ou um arquivo que não pôde ser lido durante a selagem do snapshot. Não existe fallback para o diretório de trabalho em runtime: o build falha em vez disso.

TE141
Valor de Resource Graph ou Resource Image malformado

O compilador recebeu um valor interno malformado do Resource Graph, ou uma Resource Image selada falhou nas checagens de integridade — um campo de recipe inválido (`root`, `includes`, `excludes`) ou estado de build corrompido, diferente das falhas acionáveis de entrada/selagem do `TE140`.

TE142
Conclusão void usada em posição de valor

Um `;` colocado depois da expressão final de um bloco suprime seu valor, então o bloco conclui `void` em vez de produzir um resultado. `TE142` dispara quando esse void causado por terminador é usado onde um valor é exigido — vinculado a um `let`, passado como argumento, e assim por diante.

TE143
Tipo de retorno declarado conflita com uma cauda terminada

Uma função declara `-> T`, mas um `;` depois de sua expressão final suprime esse valor, então o corpo conclui `void` em vez de um `T`. A menos que outro `return expr` forneça o valor, a função nunca consegue satisfazer a própria assinatura.

TE144
Escrita em campo que possui apenas getter

O campo declara `get`, mas não `set`; por isso, atribuições após a construção não são permitidas.

TE145
Acesso recursivo dentro de um acessor de campo

Usar `self.<mesmo-campo>` dentro do próprio acessor causaria recursão; use o nome contextual `field`.

TE146
Acessor amplia a visibilidade do campo

Um acessor pode herdar ou restringir a visibilidade do campo, mas não pode expor publicamente um campo privado.

TE147
Cauda falível retorna um valor desempacotado

`?` propaga a falha, mas desempacota o sucesso. Uma função que retorna `Result` ou `Option` deve envolver esse sucesso explicitamente com `.Ok(...)` ou `.Some(...)`.

TE148
Literal Tailwind contém interpolação

Um literal `tw"..."` precisa ser uma lista estática de nomes de classe Tailwind. Interpolar um valor nele (`tw"bg-{cor}-600"`) esconderia parte do nome da classe do scanner do Tailwind em tempo de build, por isso Zolo rejeita — escolha entre literais completos usando controle de fluxo comum.

TE150
Declaração `@inline` não possui corpo Zolo

A expansão inline exige um corpo Zolo real; declarações nativas e de plugin precisam de um wrapper Zolo.

TE151
Política `@inline` inválida ou conflitante

Use exatamente uma forma: `@inline`, `@inline(always)` ou `@inline(never)`.

TE152
Contrato `@inline(always)` recursivo

Um corpo always-inline não pode expandir a si mesmo recursivamente; use uma dica ou separe o núcleo recursivo.

TE153
`@inline(always)` não pode ser expandido com higiene

O contrato always-inline exige um corpo higiênico suportado; simplifique-o ou use `@inline` sem modo.

TE201
Modo strict: variável precisa de anotação

A tipagem strict exige que todo `let`/`const` tenha uma anotação de tipo explícita.

TE202
Modo strict: parâmetro precisa de anotação

A tipagem strict exige que todo parâmetro de função tenha um tipo explícito.

TE210
Categoria de syntax incompatível com a saída do derive

Um derive estruturado retornou syntax que não pode ser inserida no destino; o resultado deve ser `Syntax<.Items>` ou `Syntax<.Item>`.

TE211
Valor do hole não pode ser convertido em syntax

Um hole `${value}` recebeu um valor sem representação segura em código-fonte; insira um primitivo ou um nó `Syntax<K>`.

TE212
Identificador inválido passado para `syntax.ident`

`syntax.ident(text)` recebeu um texto que não é um único identificador Zolo válido e que não seja palavra reservada.

TE213
Spread de syntax inválido ou heterogêneo

Um spread `${..values}` recebeu algo diferente de uma lista ou tupla de nós de syntax de uma mesma categoria compatível.

TE214
Itens gerados pelo derive violam o escopo declarado

Os itens gerados escapam do escopo de expansão declarado por `@derive_for`, como uma função livre sem relação criada por um derive restrito a impl.

TE216
Deriver retornou um tipo de valor não suportado

Uma função `@derive_for` retornou algo diferente dos resultados suportados: `str`, `Syntax<.Items>` ou `Syntax<.Item>`.

TE217
Atributo tipado do derive não corresponde ao schema de opções

Um atributo namespaced do derive contém uma opção desconhecida, duplicada, ausente, não literal ou com tipo incorreto.

TE218
Alvo do derive não tem deriver registrado

Um tipo usa `@derive(T)`, mas nenhum deriver para `T` está disponível no escopo. Zolo nunca ignora isso silenciosamente — um nome digitado incorretamente não pode gerar um programa parcialmente gerado que só falha em runtime. Importe ou declare a função pública que expõe o deriver, exportada por convenção com o mesmo nome da capacidade.

TE220
Operando de await não é um Future nem um Task

`await` recebeu um valor cujo tipo conhecido não é `Future<T>` nem `Task<T>`. Só esses dois wrappers podem ser suspensos; um valor comum já está disponível e não há o que aguardar.

TE221
Yield usado fora de um generator

`yield` só é válido dentro de um generator declarado com `fn*`. Uma função comum ou `async fn` produz um único resultado e não expõe nenhum iterador pull para receber o yield.

TE222
Generator retorna um valor

Um generator (`fn*`) usou `return valor`. Terminação e itens produzidos são conceitos separados num generator: `return` pode encerrá-lo antes do tempo, mas seu valor nunca é produzido como item do iterador — use `yield` para isso.

TE223
Tipo incompatível no yield do generator

Um valor produzido por `yield` não satisfaz o tipo de elemento declarado do generator. Todo `yield` dentro de `fn* ... -> T` precisa produzir um valor atribuível a `T`.

TE224
`await` não é suportado dentro de um generator

`await` apareceu dentro de um generator `fn*`. Generators assíncronos ainda não têm um contrato de scheduler compartilhado por todos os backends, então Zolo rejeita a combinação em vez de deixar um backend retomá-la com semântica diferente de outro.

TE225
Label de loop desconhecido

`break :label` ou `continue :label` nomeia um loop que não está ativo lexicamente. Labels nunca atravessam fronteira de função/lambda, e uma task `spawn`ada ou um callback agendado com `every`, `after` ou `timeout` inicia sua própria região de controle de fluxo, então não pode saltar para um loop do chamador.

TE226
Label de loop ativo duplicado

Dois loops aninhados, ativos ao mesmo tempo, declaram o mesmo label. Uma saída rotulada seria ambígua para quem lê, mesmo que a declaração mais interna pudesse ser resolvida mecanicamente.

TE227
`break`/`continue` usado fora de um loop

Um `break` ou `continue` sem label aparece fora de um loop. Essas instruções só podem transferir o controle dentro de um `loop`, `while` ou `for` envolvente.

TE228
Valor de break aponta para um loop de statement

Um `break` carregando um valor aponta para `while` ou `for`. Só a forma incondicional `loop` é uma expressão que produz valor, então um `break` com valor só é válido nela.

TE229
Tipo do valor de break do loop incompatível

Os valores carregados pelos `break`s alcançáveis não concordam com o tipo de resultado de uma expressão `loop`. Um `break` isolado contribui com `void`, então não pode sair de um loop que deveria produzir um valor não-void.

TE233
Resultado de timeout precisa ser tratado como `Result`

`timeout duração { ... }` retorna `Result<Any, TimeoutError>`. A falha de timeout é controle de fluxo tipado comum — não é um record sem tipo, e nunca é convertida silenciosamente para o valor de sucesso.

TE301
Quantidade incorreta de argumentos de tipo genérico

O número de argumentos de tipo fornecidos não corresponde à quantidade de parâmetros do tipo genérico.

TE302
Trait desconhecido

Um bound de trait, bloco `impl` ou cláusula `where` faz referência a um trait que o compilador não encontra.

TE303
Membro de impl de trait não declarado ou sobreposto

Um `impl Trait for Tipo` não é coerente com a declaração do trait — ou ele adiciona um método que o trait não declara, ou outra implementação já satisfaz o mesmo alvo parametrizado e a mesma instância de trait.

TE304
Assinatura do método do trait é incompatível

Um método em `impl Trait for Tipo` não corresponde ao trait depois de substituir `Self`, argumentos do trait, tipos associados e parâmetros genéricos do método — tipos/qualificadores de parâmetro, tipo de retorno, bounds genéricos e linhas de efeito fazem parte do contrato.

TE305
Contrato de tipo associado incompleto ou inválido

Uma implementação omite um tipo associado obrigatório, o define mais de uma vez, nomeia um tipo associado que o trait não declara, ou fornece um tipo que falha nos bounds do tipo associado.

TE480
Tipo associado não satisfaz o bound declarado

Uma implementação escolheu um tipo associado concreto que não satisfaz um bound declarado pelo trait para ele. O diagnóstico nomeia a implementação, o tipo associado projetado e o requisito que falhou — o tipo original é preservado, nunca é ampliado silenciosamente para `Any`.

TE481
Tipo associado ausente ou não resolvível de forma inequívoca

Um trait declara um tipo associado sem default, mas uma implementação não o define, então o compilador não consegue projetar `Self::Item` (ou outro nome associado) a partir dessa implementação.

TE482
Argumentos de tipo do trait incompatíveis com a witness exigida

O tipo concreto implementa o nome de trait solicitado, mas com argumentos de tipo diferentes. Witnesses de trait são exatas — implementar `Sink<str>` não prova `Sink<int>`.

TE486
Membro não é comum a todas as alternativas da union

Um valor tipado como union só pode ser usado sem narrowing através de membros compartilhados por todas as alternativas. Ler um campo ou chamar um método que falta em algumas alternativas seria válido para um valor em runtime e inválido para outro.

TE708
Lista de islands sem `key`

Um aviso, não uma falha de build. Um loop `for` produz uma lista de linhas e a linha que carrega um componente `@island` não tem `key` — o morph do lado cliente então reescreve a linha nó por nó ao reordenar, em vez de aplicar o patch no lugar, e a island perde o estado hidratado do DOM (signals reiniciam, foco e scroll se perdem).

TE719
Handler em um `@island` não pode ser compilado para JavaScript

Um handler de evento dentro de um `@island` contém uma expressão que a redução do cliente do Verniz não consegue representar em JavaScript. A renderização no servidor ainda produziria o controle, mas publicá-lo sem o handler criaria um elemento com aparência interativa que não faz nada — por isso o build falha em vez disso.

TE720
Não é possível atribuir a uma cell derivada (`let<signal>`)

Uma atribuição tem como alvo um signal derivado declarado com `let<signal>`. Uma cell derivada é definida pelo seu inicializador e recalculada a partir das cells de origem que lê — não é estado gravável, então atribuir a ela a deixaria em desacordo com seu próprio grafo de dependências.

TE721
`effect` em um `@island` não pode ser compilado para JavaScript

Um `effect` dentro de um `@island` contém comportamento que a redução do cliente do Verniz não consegue compilar para JavaScript. Diferente da renderização no servidor, um effect de island não tem uma metade no servidor capaz de preservar o comportamento — se não for emitido para o cliente, ele nunca roda, então o build é rejeitado em vez de descartá-lo silenciosamente.

TE727
Argumento `key` ofuscado pelo atributo `key` do markup

Um aviso, não uma falha de build. Uma função declara seu próprio parâmetro `key`, mas `key` é um atributo reservado do markup (spec V24) que é sempre roteado pelo mapa de extras — ele nunca chega ao parâmetro `key` da própria função, que volta silenciosamente ao seu default. O build passa e mais nada parece errado.

TE730
Interpolação `@()` fora de valor de declaração

`@(expr)` compila para uma ponte de custom property de CSS (`var(--…)`), que só existe em valores de declaração — depois do `:`, antes do `;`. Em seletor, nome de propriedade ou prelúdio de at-rule não há `var()` para a ponte compilar, e splice de texto do usuário ali é anti-feature deliberada. Mova a parte dinâmica para um valor, ou alterne classes estáticas no markup.

TE731
`children` de runtime em `<style>` exige `global`

Um `<style children={expr}>` carrega conteúdo de runtime que o compilador não enxerga — não dá para içar nem escopar; escopar texto desconhecido seria mentira. Spec §6.1: conteúdo dinâmico precisa optar por `global` explicitamente (`<style global children={…}>`), a única forma de style que continua sendo nó de render.

TE732
Valor de interpolação CSS com tipo não serializável

Um valor de `@()` viaja como custom property de CSS, e só `str`, `int` e `float` serializam para uma. Valor tipado `bool`, `View`, map, struct ou função é rejeitado em compilação — no render viraria lixo ou sumiria. Valores sem tipo (`Any`) ficam em silêncio: este erro nunca chuta.

TE733
`@()` colado em texto adjacente do valor CSS

`@()` compila para `var(--…)`, e CSS não concatena strings em valores comuns — `var(--w)px` é erro de sintaxe que o browser descarta, não "número mais unidade". Escreva `calc(@(x) * 1px)` ou interpole a string inteira (`@(f"{x}px")` — dentro de `@()` você está de volta em Zolo). `!important`, `/` e `*` em `calc()` são vizinhos sem espaço legais.

TE734
`:global()` malformado — vazio ou aninhado

`:global(…)` isenta um compound do carimbo de escopo hermético. Um wrapper vazio (`:global()`) não isenta nada, e um aninhado (`:global(:global(a))`) escapa de um escape — os dois só podem ser engano. Num corpo `<style global>`, `:global()` nem é sintaxe Zolo e passa intacto.

TE735
Seletor escopado não casa com nenhum elemento do componente

Aviso, nunca falha de build. O escopo hermético carimba cada compound com a classe do componente, então um seletor que nomeia classe/id/tag que o markup do próprio componente nunca produz é regra morta — e `:root` sob escopo é estruturalmente morto. Vem com "quis dizer?" (distância de edição ≤ 2) e o conjunto renderizado do componente. Valores dinâmicos de class/id ou chamadas `el`/`raw` abrem o conjunto e suprimem o aviso — ele nunca chuta.

TE736
`<style>` fora de componente não tem escopo

Um `<style>` escopado pertence ao fn de componente que o cerca — o carimbo de classe do fn é o escopo dos seletores. Em statement top-level ou método de `impl`/`trait` não há componente, logo não há escopo. Adicione `global` (um `<style global>` estático fora de componente renderiza no lugar) ou mova para um fn de componente. Corpo com `@()` reporta isso mesmo com `global`: os valores precisam de um elemento-raiz de componente.

TE737
`@()` precisa de um elemento-raiz para carregar o valor

Todo valor de `@()` viaja como custom property de CSS no elemento-raiz do componente (o literal de elemento em posição de cauda), herdando DOM abaixo. Um componente que delega a view inteira — sem raiz de elemento própria — não dá onde os valores andarem. Faça a cauda ser um literal de elemento (um `<div>` de embrulho serve) ou remova a interpolação.

TE738
Propriedade CSS desconhecida

Aviso, nunca falha de build. Nomes de propriedade são checados contra uma tabela curada que vem com a toolchain (dado estático, sem download de registry); um quase-acerto volta com "quis dizer?" (distância de edição ≤ 2). Nomes começando com `-` — prefixos de vendor e custom properties `--` — nunca são checados, nem descritores de at-rule (o `src` de `@font-face`, …). Propriedade mais nova que a tabela custa um sublinhado, nunca um release.

TE740
Atributo HTML inválido para o elemento

Um atributo HTML conhecido não é válido para o elemento escrito. Verniz valida tags nativas contra sua tabela DOM versionada; props de componente continuam passando pelos diagnósticos comuns de argumento nomeado.

TE741
Binding do DOM inválido para o elemento

Um binding `bind:` de mão dupla não é suportado no elemento, ou seu tipo de origem conhecido é incompatível com a propriedade de DOM alvo — por exemplo, vincular uma cell `str` a `bind:checked`, que espera `bool`.

TE742
Evento de DOM desconhecido

Um atributo de handler de evento nomeia um evento que Verniz não reconhece nesse elemento. Nomes de evento usam a grafia do atributo DOM, como `onclick`, `oninput` e `onchange`.

TE743
Elemento HTML void tem filhos ou tag de fechamento

Um elemento HTML void, como `input`, `img` ou `br`, foi escrito com filhos ou uma tag de fechamento explícita. Elementos void nunca podem ter conteúdo, então use a forma self-closing.

TE744
Controle sem nome acessível de alta confiança

Uma checagem de acessibilidade de alta confiança: uma `<img>` não tem texto alternativo, ou um controle interativo não tem nome que um leitor de tela consiga anunciar. Só dispara quando a ausência do nome é certa — conteúdo dinâmico, `children` ou um spread de `HtmlAttrs` ainda podem fornecê-lo em runtime.

TE745
Atributo ARIA conhecido inválido

Um atributo ou role ARIA conhecido é usado com grafia ou valor inválido, ou um label tem como alvo um id de elemento que não existe no markup escrito.

TE746
Alvo de ref do DOM não é uma cell opcional compatível

Um alvo de `ref` não consegue receber um elemento do browser. Um `ref` precisa ser uma cell de origem `DomRef` opcional (`var<signal> nome: DomRef = nil`) declarada dentro do `@island` que a possui.

TE747
Spread de markup incompatível com HtmlAttrs/record estático do componente

Um `{...spread}` é incompatível com seu alvo. O encaminhamento dinâmico para um elemento nativo precisa ser tipado `HtmlAttrs`; um spread de componente precisa expor campos de record estaticamente conhecidos para que a checagem comum de props continue ativa.

TE748
Modificador de evento do DOM inválido ou incompatível

Um modificador de evento (`prevent`, `stop`, `once`, `capture`, `passive`, `self`) é desconhecido, duplicado, ou combinado de forma incompatível — `passive` não pode ser combinado com `prevent`.

TE749
Portal, boundary ou DOM ref não consegue se conectar ao alvo declarado

Um contrato de attach não pode ser cumprido — o compilador pega alvos de portal estaticamente vazios, e o verificador de attach de desenvolvimento também reporta alvos de portal ausentes, marcadores de island obsoletos, propriedades de binding inválidas e refs que não pertencem à island.

TE750
Membro de lifecycle de action usado em função comum

Um membro de lifecycle como `pending`, `error` ou `state` foi lido a partir de uma referência de função comum. Só uma referência a uma função declarada `@action` tem o tipo nominal `ActionFn<...>` e uma lane do lado cliente.

TE751
Lane observável de action sem island proprietária

Um código fora de qualquer `@island` tenta observar o lifecycle de um `ActionFn`. Uma referência de action continua chamável no servidor, mas `pending`, `state`, `retry` e o resto do lifecycle observável são capacidades do browser que não conseguem cruzar uma fronteira de island ou de wire.

TE752
Política de mutation action desconhecida ou insegura

Uma mutation action solicitou uma política desconhecida, ou uma política de substituição/cancelamento como `.Latest`. Uma mutation já aceita pelo servidor ainda pode ser confirmada mesmo depois que o cliente deixa de se importar com a resposta, então cancelar só a continuação do cliente faria a UI mentir sobre o efeito.

TE753
Action falível chamada sem tratamento observável de erro

Um `ActionFn` que retorna `Result<_, E>` é chamado por uma island que nunca observa o estado de falha da lane — lendo `.error`/`.state`, ou chamando `.try_run(...)`. Sem um observador explícito, uma falha de validação ou transporte passa despercebida com facilidade.

TE754
Lane explícita de action tem identidade de lista instável

Uma `.lane()` foi criada diretamente dentro de um `for` renderizado. Uma lane explícita possui estado mutável de lifecycle do cliente, mas uma iteração de lista não tem identidade lexical estável assim que linhas são inseridas, removidas ou reordenadas.

TE763
Valor não implementa o contrato Wire do browser

Um valor que cruza entre Zolo e o TypeScript do browser não tem representação JSON determinística que a ponte Wire aceite — a ponte nunca recorre a `any`. Funções, closures, handles, `ResourceFs`, chaves de map que não são string, e tipos do usuário sem marcação ficam do seu lado de origem; structs/enums precisam de `@wire`.

TE764
Valor secreto/privado alcançável a partir do código do cliente

Uma declaração marcada `@secret` é alcançável a partir de um tipo `@wire` ou de um contrato de browser `@action`. Publicá-la colocaria um valor privado numa declaração, codec, request, response ou bundle de browser gerado — remover `@secret` só para silenciar o diagnóstico é inseguro.

TE775
Coleção de conteúdo não satisfaz seu schema ou contrato de slug

Verniz não conseguiu transformar um arquivo Markdown/JSON/TOML/YAML escrito no struct de metadados declarado por `content.collection` — um campo de frontmatter ausente ou com tipo errado, uma data que não parseia, um caminho não portável, ou (para `ContentTransform`) um problema de route callback/alias/fallback.

TE820
Tipo não implementa um trait exigido

Uma função genérica foi chamada com um argumento de tipo que não implementa um trait exigido por um de seus bounds.

TE821
Operador exige trait bound no parâmetro de tipo

Um operador é usado sobre um parâmetro de tipo genérico que não carrega o trait bound correspondente. Sem ele, o compilador não garante que a operação vale para todo argumento de tipo possível.

TE822
Trait não existe

Um bound na assinatura da função nomeia um trait que o compilador não conhece.

TE823
Operador exige que o tipo concreto implemente um trait

Um operador é usado sobre um valor de struct/enum concreto cujo tipo não implementa o trait exigido. Sem ele não há método para dirigir o operador, e quebraria em runtime.

TE824
Caminho qualificado de trait inválido

Caminhos qualificados de trait precisam ser `core::<módulo>::<Trait>` ou `std::<módulo>::<Trait>`, nomeando um `pub trait` realmente declarado ali — tanto em bound genérico quanto em cabeçalho de `impl`.

TE825
Impl de trait incompleta: método obrigatório faltando

Um `impl Trait for Tipo` está sem um ou mais métodos obrigatórios (os que não têm corpo padrão). Sem eles, o despacho de método e operador quebraria em runtime.

TE826
Método de coleção em `Result`/`Option` não desembrulhado

Um método de coleção (`each`, `filter`, `len`, …) foi chamado diretamente sobre um wrapper `Result` ou `Option`. Desembrulhe-o primeiro com `?>`, `?` ou `.unwrap()`.

TE827
Encadeamento null-safe `?.` em `Result`/`Option`

`?.` é encadeamento null-safe, não desembrulhamento falível. Um `Result` ou `Option` nunca é `nil`, então o encadeamento opera sobre o wrapper. Use `expr ?> .m(...)`, `let v = expr?` ou `expr!.m(...)` em vez disso.

TE828
Tipo não é iterável

`for x in expr` exige que `expr` produza uma sequência. Zolo itera coleções nativas e qualquer tipo que implemente `Iterator`/`IntoIterator`; um struct ou enum que não implementa nenhum dos dois não dá nada ao laço.

TE829
Match não exaustivo em um tipo fechado

Um `match` sobre um tipo fechado — `bool`, um enum (incluindo payloads), um optional de payload fechado, uma union fechada, ou tuplas/records de campos fechados — tem braços sem guard que não cobrem todos os valores possíveis. Um braço com guard nunca prova cobertura, porque o guard pode avaliar para `false`.

TE830
Pattern de enum com forma de payload errada

Um pattern de enum nomeia uma variante real mas a desestrutura com a forma de payload errada — variantes unit, tuple e struct exigem cada uma sua própria forma de pattern, e a aridade da tuple ou os campos do struct precisam concordar com a declaração.

TE831
Alternativas de or-pattern vinculam nomes ou tipos incompatíveis

Toda alternativa de um or-pattern (`A(x) | B(x)`) precisa introduzir os mesmos nomes com tipos compatíveis, já que o corpo do match roda depois que qualquer alternativa der certo e pode ler o nome que ela vinculou.

TE832
Postfix `?`/`?>` exige um operando estaticamente falível

O postfix `?` e o pipe falível `?>` exigem um valor que pode falhar — `T?`, `Option<T>` ou `Result<T, E>`. Aplicar qualquer um deles a um valor estaticamente simples não tem caminho de falha para propagar.

TE833
Caminho de falha falível incompatível com o tipo de retorno envolvente

O postfix `?`/`?>` retorna o `nil`, `Option.None` ou `Result.Err` correspondente a partir da função envolvente, e essa falha precisa ser compatível com o tipo de retorno declarado. `Option.None` não é intercambiável com `Result.Err`, e uma falha nilable nunca é embrulhada silenciosamente em nenhum dos dois enums.

TE834
Operador exclusivo de nil usado diretamente em `Option`/`Result` embrulhado

`?.` e `??` são operadores exclusivos de nil, mas `Option<T>` e `Result<T, E>` são valores de enum embrulhados — nenhum dos dois wrappers é `nil` em si, então `??` não consegue desembrulhá-lo. Use o postfix `?`, pattern matching, ou um método explícito do wrapper como `unwrap_or`.

TE835
Cast inválido; use parsing, um predicado ou uma conversão de domínio

`as` só executa casts conhecidos pelo compilador — não faz parsing de texto, não calcula truthiness, não serializa dados nem executa uma conversão implementada por um tipo do usuário. Use `parse::<T>()`, `to_string()`, `try_into::<T>()`, ou uma comparação explícita.

TE836
Cast checado nunca pode ter sucesso ou não tem implementação exata

`valor as? T` promete uma conversão exata, checada em runtime, mas os tipos de origem e destino não têm um caminho checado que preserve o valor — por exemplo, fazer parsing de texto não é cast. Use `parse`, `try_into`, ou uma política de cast numérico.

TE837
Cast numérico pode perder informação

Um `as` numérico pode estreitar um range, mudar o sinal, descartar uma parte fracionária, ou arredondar um inteiro grande demais para o float de destino. Use `as?` quando só um valor exato for aceitável, ou `cast` com uma política nomeada de arredondamento/overflow quando a perda for intencional.

TE838
Cast não checado a partir de um valor dinâmico

Um cast `as` simples a partir de `Any` não consegue provar que o valor em runtime realmente tem o tipo solicitado, então Zolo rejeita. Use um cast checado (`as?`) ou narrowing de fluxo (`is`).

TE839
Stringificação via `as str` é comportamento legado

`valor as str` mistura cast com formatação, e continua disponível apenas como ponte de migração. Use `.to_string()` explicitamente, ou um codec como `json.encode` ao produzir um formato de wire.

TE840
Cast redundante

O valor de origem já tem o tipo solicitado, então `as Tipo` não comunica nenhuma intenção nova e não executa trabalho algum. Remova a expressão de cast redundante.

TE841
Política de cast numérico incompatível com a origem ou o destino

Uma política de `cast` numérico só se aplica à família de conversão que ela nomeia — `.wrap` é definida só para conversão inteiro-para-inteiro, enquanto `.trunc`/`.floor`/`.ceil`/`.nearest_even` convertem valores de ponto flutuante. Escolha uma política compatível, ou use `as?` quando só valores exatos forem aceitos.

TE842
Nenhuma implementação direta de conversão From/TryFrom

`into::<T>()` exige um `impl From<Origem> for T` direto, e `try_into::<T>()` exige um `impl TryFrom<Origem> for T` direto. Zolo nunca inventa uma cadeia de conversão passando por um tipo intermediário — implemente o trait correspondente, ou chame o construtor pretendido explicitamente.

TE843
Tipo de origem ou destino do parse não é suportado

O `parse::<T>()` genérico é uma operação de texto: o receptor precisa ser `str` ou `bytes`, e `T` precisa ser um dos tipos numéricos suportados pelo parser do core. Use um decoder específico de domínio (como `json.decode`) para dados estruturados.

TE844
Bitcast unsafe exige layouts numéricos de mesmo tamanho

`unsafe bitcast::<T>(valor)` reinterpreta os bits da representação em vez de fazer uma conversão numérica ou de domínio, então os dois tipos precisam ser tipos numéricos de largura fixa com exatamente a mesma quantidade de bits. Use `as?`, `cast::<T>(política)`, `into` ou `try_into` para de fato mudar o valor.

TE845
Implementação From/TryFrom viola a coerência de conversão

Um `impl From<S>`/`TryFrom<S>` só é legal no pacote que possui o tipo de origem `S` ou o tipo de destino — caso contrário, dois pacotes sem relação poderiam definir significados concorrentes para a mesma conversão. Zolo também rejeita implementações sobrepostas e nunca busca cadeias de conversão como `A -> B -> C`.

TE846
Alvo de cast verificado ou de `is` sem testemunha em runtime

`as?` e `is` só conseguem sondar uma categoria primitiva ou o nome declarado de um tipo do usuário (tipos genéricos pelo nome-base). Uma forma estrutural como `[int]`, `{str: int}`, um record, uma tupla, uma união ou `T?` não tem testemunha em runtime: sonde a categoria (`as? array`, `is map`) ou decodifique o valor com `@derive(Deserialize)` para validar os elementos.

TE970
Tagged template sem função de tag correspondente

Um tagged template `tag"…"` não é sintaxe especial — ele se reduz a uma chamada comum a uma função chamada `tag`, e nenhuma função com esse nome está em escopo.

TE976
Statement que não é expressão dentro de `parallel { }`

`parallel { … }` roda cada statement de topo como sua própria task concorrente, então todo statement do bloco precisa ser uma expressão que possa virar uma.

04

Efeitos

16
TE800
Declaração de efeito ausente

Uma função executa um efeito (`!io`, `!net`, `!fs`, ...) que não declarou em sua assinatura.

TE801
Efeito não tratado

Um efeito foi executado mas nenhum bloco `handle` envolvente o trata.

TE802
Efeito não declarado pelo handler

Um bloco `handle` tenta tratar uma operação que o efeito não declarou.

TE803
Operação ausente no handler

Um bloco `handle` está sem a implementação de uma das operações declaradas pelo efeito.

TE804
Operação desconhecida no handler

O handler referencia um nome de operação que não existe no efeito.

TE805
Efeito desconhecido

Uma assinatura de função ou handler faz referência a um efeito que o compilador não encontra.

TE806
Aridade / assinatura de efeito incompatível

Uma chamada `perform` ou operação de handler não corresponde à assinatura declarada do efeito.

TE807
Cobertura do handler-valor está incompleta

`handle … with <handler_valor>` usa um handler-valor que cobre só parte das operações do efeito. O erro aparece no `with` e nomeia as operações faltantes.

TE808
Tipo de argumento incompatível no `perform`

Uma chamada `perform Efeito::op(…)` passou um argumento cujo tipo não corresponde ao tipo do parâmetro declarado da operação.

TE809
Função realiza efeitos que não declara

A forma resumida do TE800: em vez de reportar cada `perform`, junta todos os efeitos que a função de fronteira realmente precisa e reporta todos na assinatura.

TE810
Handler cobre um efeito que o corpo nunca realiza

É um aviso, não uma falha de build. Um bloco `handle` usando um handler-valor com anotação explícita `handler<…>` cobre um efeito que o corpo tratado nunca realiza.

TE811
Parâmetro genérico usado como tipo e como variável de linha

Um parâmetro genérico é usado tanto como parâmetro de tipo quanto como cauda de variável de linha numa cláusula `with` (`{Fs | e}`). Um mesmo nome não pode significar um tipo e um conjunto de efeitos extras ao mesmo tempo.

TE812
Efeito multi-shot não é suportado no backend nativo

Um `perform` mira uma operação declarada `multi` (retomável mais de uma vez). Continuações multi-shot hoje são exclusivas da VM.

TE813
Não é possível inferir argumento de tipo da operação de efeito

O parâmetro de tipo de um efeito genérico não resolveu num `perform` — nem os tipos dos argumentos nem um `with Efeito<Concreto>` deram um tipo concreto.

TE814
`handle … with h` exige um handler-valor

`h` precisa ser algo cujo tipo seja `handler<…>`. Se resolver para outra coisa, não há conjunto de braços para despachar as operações realizadas.

TE815
Função que exige efeito passada onde se espera uma função pura

Um parâmetro tipado como função simples (`fn(...) -> T`, sem cláusula `with`) promete pureza — nada do que roda nele realiza um efeito que o chamador já não conheça. Passar ali uma função que ela própria exige um efeito deixa esse efeito escapar totalmente não declarado, a mesma classe de vazamento que `TE802` bloqueia na direção comum de chamada.

05

Runtime

01

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br