# Diagnosticos y errores semanticos

## Objetivo de aprendizaje
- Interpretar diagnosticos rapidamente y elegir la correccion correcta.

## Sintaxis clave
```text
Line 2, column 12: Incompatible return type: expected int but got string
```

## Ejemplos
- Diagnosticos comunes:
- undeclared variable
- unknown function o class
- cantidad de argumentos incorrecta
- asignacion o retorno incompatible
- return fuera de funcion
- import ciclico o simbolo faltante

## Diagnosticos frecuentes y correccion rapida
- `Undeclared variable: 'x'`
	- Causa: la variable no existe en el scope actual.
	- Correccion: declara con `let`/`const` o usa el simbolo correcto.

- `Unknown function or class: 'Foo'`
	- Causa: import faltante, typo o nombre incorrecto.
	- Correccion: agrega el import y valida el identificador exacto.

- `Incorrect number of arguments for 'fn': A != B`
	- Causa: la llamada no coincide con la firma de funcion/metodo.
	- Correccion: ajusta argumentos o firma.

- `Cannot initialize 'x' of type list<T> with list<any>`
	- Causa: inferencia incompatible de lista.
	- Correccion: usa declaracion tipada (`let x: list<T> = []`) o valores compatibles.

- `Cannot call member 'length' on type list<...>`
	- Causa: `length()` no es metodo soportado para listas en Lucia.
	- Correccion: usa `len(lista)`.

- `Unexpected Token '='` cerca de escritura por indice
	- Causa en versiones antiguas: no estaba habilitado el target indexado.
	- Comportamiento actual: `obj[i] = value;` esta soportado.

## Errores comunes
- Aplicar quick fix sin entender causa raiz.
- Ignorar limites entre archivos cuando el error viene de imports.

## Flujo de depuracion recomendado
- Atiende primero el primer error; los siguientes suelen ser en cascada.
- Verifica imports y nombres antes de tocar logica compleja.
- Reduce el caso a un snippet minimo reproducible.
- Ejecuta nuevamente despues de cada ajuste para confirmar causa real.

## Practica sugerida
- Provoca 3 diagnosticos intencionales y corrige cada uno explicando la causa.

## Practica extendida
- Crea un snippet por categoria: sintaxis, tipo incompatible e import/modulo.
- Escribe al lado la correccion esperada para cada mensaje.

## Relacionados
- declarations-let-const
- functions-and-builtins
- oop-and-modules
