feat: add object field unknown-field diagnostic

This commit is contained in:
Hermes Agent
2026-06-23 03:06:22 -06:00
parent 5914524ad6
commit 5a63e76a44
8 changed files with 42 additions and 5 deletions
+18 -1
View File
@@ -150,7 +150,24 @@ Output:
Type mismatch for field player.score: expected NUMBER, but this value looks like TEXT.
```
Both sides of this narrow field foundation are covered by validation: `tests/typecheck_object_field_good.claro` checks that `SET player.score 10` is accepted for a `HAS score NUMBER` field, `tests/typecheck_object_field_text_good.claro` checks that `SET player.name "Ada"` is accepted for a `HAS name TEXT` field, `tests/typecheck_object_field_yesno_good.claro` checks that `SET player.ready YES` is accepted for a `HAS ready YESNO` field, `tests/typecheck_object_field_bad.claro` checks the NUMBER wrong-type diagnostic, `tests/typecheck_object_field_text_bad.claro` checks the TEXT wrong-type diagnostic, and `tests/typecheck_object_field_yesno_bad.claro` checks the YESNO wrong-type diagnostic.
If a learner assigns to a field the class did not declare, `claro typecheck` now names the object class and suggests the matching `HAS` line:
```claro
CLASS Player
HAS score NUMBER
END
NEW Player player
SET player.level 3
```
Output:
```text
Object Player has no field level. Check the field name or add HAS level NUMBER to the class.
```
Both sides of this narrow field foundation are covered by validation: `tests/typecheck_object_field_good.claro` checks that `SET player.score 10` is accepted for a `HAS score NUMBER` field, `tests/typecheck_object_field_text_good.claro` checks that `SET player.name "Ada"` is accepted for a `HAS name TEXT` field, `tests/typecheck_object_field_yesno_good.claro` checks that `SET player.ready YES` is accepted for a `HAS ready YESNO` field, `tests/typecheck_object_field_bad.claro` checks the NUMBER wrong-type diagnostic, `tests/typecheck_object_field_text_bad.claro` checks the TEXT wrong-type diagnostic, `tests/typecheck_object_field_yesno_bad.claro` checks the YESNO wrong-type diagnostic, and `tests/typecheck_object_field_unknown_bad.claro` checks the unknown-field diagnostic.
This slice is intentionally small: it covers direct `NEW Class object` plus `SET object.field value` cases in one file. Broader object flows, aliases, method return checks, and richer object signatures remain future work.