From 40145e5c7426cecd842ec91d52b461e2f29d0800 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sun, 20 Sep 2026 06:37:37 +0000 Subject: [PATCH] test: cover lowercase CHECK TYPE syntax --- docs/CURRENT_STATUS.md | 1 + docs/ROADMAP.md | 1 + tests/test_validate_typecheck_diagnostics.py | 6 ++++++ tests/typecheck_lowercase_check_type_good.claro | 2 ++ tools/validate_typecheck_diagnostics.py | 1 + 5 files changed, 11 insertions(+) create mode 100644 tests/typecheck_lowercase_check_type_good.claro diff --git a/docs/CURRENT_STATUS.md b/docs/CURRENT_STATUS.md index 513799b..bfde130 100644 --- a/docs/CURRENT_STATUS.md +++ b/docs/CURRENT_STATUS.md @@ -66,6 +66,7 @@ Ready now: - `TYPE OF` reports a direct repair hint when the learner forgets the result name after `AS`, for example `TYPE OF score AS` reports `TYPE OF needs a result name after AS. Try: TYPE OF score AS kind.` - A valid `TYPE OF score AS kind` statement has a focused positive typecheck fixture, so the complete form is protected from diagnostic-only regression coverage. - `TYPE OF` remains case-insensitive like other Claro keywords, with focused positive coverage for lowercase `type of score as kind` syntax. +- `CHECK TYPE` remains case-insensitive like other Claro keywords, with focused positive coverage for lowercase `check type score is number` syntax. - `TYPE OF` rejects extra words after its result name with a direct repair hint, so `TYPE OF score AS kind extra` explains that only one result name belongs there; typed `TEACH ... RETURNS TYPE` declarations likewise reject extra words after the return type with a direct repair hint - typed `TEACH ... RETURNS` declarations reject a missing return type with a direct repair hint, such as `Function greet needs a return type after RETURNS. Add a type such as NUMBER.` The same diagnostic names the complete class and method, including compatibility `TAKES` / `LEARNED` methods: `Method Player.score needs a return type after RETURNS. Add a type such as NUMBER.` - typed list/map checks through `claro typecheck`, including a nested `LIST OF MAP` insertion example diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 3786355..4554607 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -84,6 +84,7 @@ Keep declared return types honest: `claro typecheck` now reports friendly diagno 8q.5.2. Keep `TYPE OF` declarations named: a missing result name after `AS` now gets a direct repair hint with a complete `TYPE OF score AS kind` example. 8q.5.3. Keep complete `TYPE OF` examples protected: the valid `TYPE OF score AS kind` form now has a positive fixture in the focused typecheck validation matrix. 8q.5.3a. Keep `TYPE OF` keyword handling consistent: lowercase `type of score as kind` now has positive fixture coverage alongside the uppercase form. +8q.5.3b. Keep `CHECK TYPE` keyword handling consistent: lowercase `check type score is number` now has positive fixture coverage alongside the uppercase form. 8q.5.4. Keep bare `TYPE OF` declarations understandable: report that the expression, `AS`, and result name are all required, with a complete repair example. 8q.6. Keep `TYPE OF` declarations unambiguous: extra words after the result name now get a direct repair hint instead of being silently included in the variable name. 8q.7. Keep typed `TEACH` declarations unambiguous: extra words after a declared return type now get a direct repair hint instead of being treated as part of an unknown type. diff --git a/tests/test_validate_typecheck_diagnostics.py b/tests/test_validate_typecheck_diagnostics.py index 3a95bbf..16092f1 100644 --- a/tests/test_validate_typecheck_diagnostics.py +++ b/tests/test_validate_typecheck_diagnostics.py @@ -107,6 +107,12 @@ class ValidateTypecheckDiagnosticsTests(unittest.TestCase): MODULE.EXPECTED_OK, ) + def test_includes_lowercase_check_type_success_fixture(self): + self.assertIn( + "tests/typecheck_lowercase_check_type_good.claro", + MODULE.EXPECTED_OK, + ) + def test_includes_lowercase_compatibility_return_success_fixture(self): self.assertIn( "tests/typecheck_function_lowercase_return_good.claro", diff --git a/tests/typecheck_lowercase_check_type_good.claro b/tests/typecheck_lowercase_check_type_good.claro new file mode 100644 index 0000000..68ac76c --- /dev/null +++ b/tests/typecheck_lowercase_check_type_good.claro @@ -0,0 +1,2 @@ +set score number 10 +check type score is number diff --git a/tools/validate_typecheck_diagnostics.py b/tools/validate_typecheck_diagnostics.py index d62e6a7..40f8d51 100644 --- a/tools/validate_typecheck_diagnostics.py +++ b/tools/validate_typecheck_diagnostics.py @@ -484,6 +484,7 @@ EXPECTED = { EXPECTED_OK = [ "tests/typecheck_type_of_good.claro", "tests/typecheck_lowercase_type_of_good.claro", + "tests/typecheck_lowercase_check_type_good.claro", "tests/typecheck_function_good.claro", "tests/typecheck_function_return_good.claro", "tests/typecheck_function_compat_return_good.claro",