From 65208422e3e7bfaa9b66b635bcc68721be3abbb4 Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala Date: Mon, 9 Feb 2026 18:10:09 -0500 Subject: [PATCH 1/2] Fix #2116 - Exp.cls_of_term shows cls of underlying expression if projector - Cursor inspector still shows projector info on left side --- src/language/term/Exp.re | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/language/term/Exp.re b/src/language/term/Exp.re index f58279abe4..83ce53b3c4 100644 --- a/src/language/term/Exp.re +++ b/src/language/term/Exp.re @@ -75,7 +75,7 @@ let rep_id: t => Id.t = IdTagged.rep_id; let term_of: t => term = IdTagged.term_of; let unwrap: t => (term, term => t) = IdTagged.unwrap; -let cls_of_term: type a. Grammar.exp_term(a) => cls = +let rec cls_of_term: type a. Grammar.exp_term(a) => cls = fun | Invalid(_) => Invalid | EmptyHole => EmptyHole @@ -116,7 +116,7 @@ let cls_of_term: type a. Grammar.exp_term(a) => cls = | Filter(_) => Filter | Closure(_) => Closure | Parens(_) => Parens - | Projector(_) => Projector + | Projector(_, e) => cls_of_term(e.term) | Cons(_) => Cons | ListConcat(_) => ListConcat | UnOp(op, _) => UnOp(op) From 41c25059adf00d9b929623d3ee7da627069c6b0e Mon Sep 17 00:00:00 2001 From: Alexander Bandukwala <7h3kk1d@gmail.com> Date: Tue, 10 Feb 2026 09:22:00 -0500 Subject: [PATCH 2/2] Fix test and add comment --- src/language/term/Exp.re | 2 ++ test/Test_Grammar.re | 18 +++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/language/term/Exp.re b/src/language/term/Exp.re index 83ce53b3c4..59c046fba1 100644 --- a/src/language/term/Exp.re +++ b/src/language/term/Exp.re @@ -116,6 +116,8 @@ let rec cls_of_term: type a. Grammar.exp_term(a) => cls = | Filter(_) => Filter | Closure(_) => Closure | Parens(_) => Parens + // We're bypassing projectors from cls because they're breaking cursor inspector messages. + // Future work could be to specialize projectors in the cursor inspector. | Projector(_, e) => cls_of_term(e.term) | Cons(_) => Cons | ListConcat(_) => ListConcat diff --git a/test/Test_Grammar.re b/test/Test_Grammar.re index 05f81398d7..1ead9062e4 100644 --- a/test/Test_Grammar.re +++ b/test/Test_Grammar.re @@ -214,13 +214,17 @@ let tests = ( let cls_testable = testable(Fmt.using(Exp.show_cls, Fmt.string), Exp.equal_cls); List.iter( - cls => - check( - cls_testable, - Exp.show_cls(cls) ++ " Equivalency", - cls, - Exp.cls_of_term(sample_expression(cls).term), - ), + (cls: Exp.cls) => + switch (cls) { + | Projector => () // Excluding projectors from cls + | _ => + check( + cls_testable, + Exp.show_cls(cls) ++ " Equivalency", + cls, + Exp.cls_of_term(sample_expression(cls).term), + ) + }, exp_classes, ); },