# Diagnostics and semantic errors

## Learning objective
- Interpret diagnostics quickly and choose the right fix path.

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

## Examples
- Common diagnostics:
- undeclared variable
- unknown function or class
- wrong argument count
- incompatible assignment or return type
- return outside function
- cyclic import or missing symbol

## Frequent diagnostics and quick fixes
- `Undeclared variable: 'x'`
	- Cause: variable not declared in current scope.
	- Fix: declare with `let`/`const` or reference the correct symbol.

- `Unknown function or class: 'Foo'`
	- Cause: missing import, typo, or wrong symbol name.
	- Fix: add import and verify exact identifier.

- `Incorrect number of arguments for 'fn': A != B`
	- Cause: call does not match function/method signature.
	- Fix: update call arguments or signature.

- `Cannot initialize 'x' of type list<T> with list<any>`
	- Cause: incompatible inferred list type.
	- Fix: use a typed declaration (`let x: list<T> = []`) or compatible values.

- `Cannot call member 'length' on type list<...>`
	- Cause: `length()` is not a Lucia list method.
	- Fix: use `len(listValue)`.

- `Unexpected Token '='` near indexed write
	- Cause in older compiler versions: indexed assignment target not enabled.
	- Current behavior: `obj[i] = value;` is supported.

## Common mistakes
- Applying quick fix without understanding root cause.
- Ignoring file/module boundaries when errors come from imports.

## Debug workflow
- Read the first error first. Later diagnostics are often cascade effects.
- Verify imports and symbol names before touching complex logic.
- Reduce to a minimal reproducible snippet.
- Re-run after each fix to confirm the true root cause is solved.

## Suggested practice
- Trigger 3 diagnostics intentionally and fix each with explanation.

## Practice set
- Create one snippet for each category: syntax, type mismatch, and module/import.
- Write the expected fix next to each error message.

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