Skip to content

Commit fe5eb6e

Browse files
committed
Select by range not id in stepper
1 parent aeea780 commit fe5eb6e

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

src/haz3lcore/zipper/action/Action.re

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ type rel =
3434
[@deriving (show({with_path: false}), sexp, yojson, eq)]
3535
type select =
3636
| All
37+
| PointToPoint((Point.t, Point.t))
3738
| Resize(move)
3839
| Smart(int)
3940
| Tile(rel)
@@ -224,6 +225,7 @@ let should_animate: t => bool =
224225
switch (s) {
225226
| Resize(_) => false
226227
| All
228+
| PointToPoint(_)
227229
| Smart(_)
228230
| Tile(_)
229231
| Term(_)

src/haz3lcore/zipper/action/Perform.re

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ let go =
8585
|> return(Cant_select)
8686
| Select(Resize(Goal(_))) => failwith("Select not implemented for goals")
8787
| Select(All) => Ok(Select.all(z))
88+
| Select(PointToPoint((p1, p2))) =>
89+
z
90+
|> Move.to_point(~measured=syntax.measured, ~goal=p1)
91+
|> OptUtil.and_then(z =>
92+
Select.to_point(~measured=syntax.measured, ~goal=p2, z)
93+
)
94+
|> return(Cant_select)
8895
| Select(Term(Current)) =>
8996
Select.current_term(
9097
syntax.term_data,

src/web/app/editors/result/StepperEditor.re

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,36 @@ module View = {
130130

131131
taken_steps(model.taken_steps)
132132
@ next_steps(model.next_steps, ~inject=x =>
133-
Some(List.nth(model.next_steps, x)) == selected_id
134-
? signal(TakeStep(x))
135-
: inject(Select(Term(Id(List.nth(model.next_steps, x), Right))))
133+
{
134+
open OptUtil.Syntax;
135+
let+ range =
136+
TermData.extreme_measures(
137+
List.nth(model.next_steps, x),
138+
model.editor.editor.syntax.term_data,
139+
model.editor.editor.syntax.measured,
140+
);
141+
Some(List.nth(model.next_steps, x)) == selected_id
142+
? signal(TakeStep(x)) : inject(Select(PointToPoint(range)));
143+
}
144+
|> Option.value(~default=Ui_effect.Ignore)
136145
)
137-
@ refl_steps(model.refls, ~inject=x => {
138-
Some(List.nth(model.refls, x)) == selected_id
139-
? signal(Refl(x))
140-
: {
141-
inject(Select(Term(Id(List.nth(model.refls, x), Right))));
142-
}
143-
});
146+
@ refl_steps(model.refls, ~inject=x =>
147+
{
148+
open OptUtil.Syntax;
149+
let+ range =
150+
TermData.extreme_measures(
151+
List.nth(model.refls, x),
152+
model.editor.editor.syntax.term_data,
153+
model.editor.editor.syntax.measured,
154+
);
155+
Some(List.nth(model.refls, x)) == selected_id
156+
? signal(Refl(x))
157+
: {
158+
inject(Select(PointToPoint(range)));
159+
};
160+
}
161+
|> Option.value(~default=Ui_effect.Ignore)
162+
);
144163
};
145164

146165
/* Steppers don't support probe dynamics - expressions shown are

0 commit comments

Comments
 (0)