test: cover unknown method return types

This commit is contained in:
Hermes Agent
2026-09-09 12:00:54 +00:00
parent e4859e82d5
commit e26a398082
4 changed files with 15 additions and 0 deletions
+5
View File
@@ -2,6 +2,11 @@
## Unreleased
### Validate unknown method return types
- Added focused `claro typecheck` regression coverage for an object method declaring an unsupported `RETURNS` type such as `BANANA`.
- The release validator now checks function and method unknown-return-type diagnostics separately.
### Diagnose unknown declared return types
- `claro typecheck` now reports a learner-facing error when a function or object method declares an unsupported `RETURNS` type such as `BANANA`.
+2
View File
@@ -191,6 +191,8 @@ Return declarations must use a known Claro type. If the type name is misspelled,
Function square declares an unknown return type BANANA. Use a Claro type such as NUMBER, TEXT, YESNO, LIST, or MAP.
```
The same check applies to methods, so `Player.score RETURNS BANANA` reports `Method Player.score declares an unknown return type BANANA...` instead of allowing a misspelled type into a class definition.
The unknown-function diagnostic is validated for both modern `DO squre 4` and compatibility `CALL squre WITH 4` calls. Compatibility calls that leave `WITH` empty, such as `CALL greet WITH`, now count as zero arguments, so learners get the same missing-argument guidance as `DO greet` instead of the checker treating the blank as an argument.
For functions with more than one checked parameter, Claro reports each mismatched argument with the parameter name:
@@ -0,0 +1,5 @@
CLASS Player
TEACH score amount RETURNS BANANA
RETURN amount
END
END
+3
View File
@@ -176,6 +176,9 @@ EXPECTED = {
"tests/typecheck_invalid_return_type_bad.claro": [
"tests/typecheck_invalid_return_type_bad.claro:1: Function square declares an unknown return type BANANA. Use a Claro type such as NUMBER, TEXT, YESNO, LIST, or MAP.",
],
"tests/typecheck_method_invalid_return_type_bad.claro": [
"tests/typecheck_method_invalid_return_type_bad.claro:2: Method Player.score declares an unknown return type BANANA. Use a Claro type such as NUMBER, TEXT, YESNO, LIST, or MAP.",
],
"tests/typecheck_object_field_unknown_object_bad.claro": [
"tests/typecheck_object_field_unknown_object_bad.claro:5: Object player is not known yet. Create it with NEW ClassName player before setting player.score.",
],