Skip to content

Commit 4ed46e8

Browse files
7h3kk1dclaude
andcommitted
Rename error sidebar to problem sidebar
The sidebar shows errors, warnings, and holes — "problem" is the correct umbrella term. Renames modules (ErrorCollection → ProblemCollection, ErrorSidebar → ProblemSidebar), types (error_context → problem_context, error_category → problem_category), settings fields, CSS classes, and the test file. Category-specific names (e.g. "Static Errors") are preserved where they refer to a specific kind of problem. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 8e93500 commit 4ed46e8

File tree

8 files changed

+148
-135
lines changed

8 files changed

+148
-135
lines changed

src/web/Settings.re

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ module Model = {
5858
sidebar: {
5959
panel: LanguageDocumentation,
6060
show: true,
61-
errors: {
61+
problems: {
6262
collapsed: [],
6363
flat: false,
6464
expanded: [],
@@ -83,14 +83,14 @@ module Model = {
8383
[@deriving (show({with_path: false}), sexp, yojson)]
8484
type persistent = t;
8585

86-
/* Clear expanded error IDs before persisting — tile IDs are ephemeral
86+
/* Clear expanded problem IDs before persisting — tile IDs are ephemeral
8787
and go stale across sessions. */
8888
let persist = settings => {
8989
...settings,
9090
sidebar: {
9191
...settings.sidebar,
92-
errors: {
93-
...settings.sidebar.errors,
92+
problems: {
93+
...settings.sidebar.problems,
9494
expanded: [],
9595
},
9696
},
@@ -294,35 +294,35 @@ module Update = {
294294
panel: windowToSwitchTo,
295295
},
296296
}
297-
| Sidebar(Errors(ToggleCollapsed(cat))) => {
297+
| Sidebar(Problems(ToggleCollapsed(cat))) => {
298298
...settings,
299299
sidebar: {
300300
...settings.sidebar,
301-
errors:
301+
problems:
302302
SidebarModel.Settings.toggle_collapsed(
303303
cat,
304-
settings.sidebar.errors,
304+
settings.sidebar.problems,
305305
),
306306
},
307307
}
308-
| Sidebar(Errors(ToggleFlat)) => {
308+
| Sidebar(Problems(ToggleFlat)) => {
309309
...settings,
310310
sidebar: {
311311
...settings.sidebar,
312-
errors: {
313-
...settings.sidebar.errors,
314-
flat: !settings.sidebar.errors.flat,
312+
problems: {
313+
...settings.sidebar.problems,
314+
flat: !settings.sidebar.problems.flat,
315315
},
316316
},
317317
}
318-
| Sidebar(Errors(ToggleExpanded(id))) => {
318+
| Sidebar(Problems(ToggleExpanded(id))) => {
319319
...settings,
320320
sidebar: {
321321
...settings.sidebar,
322-
errors:
322+
problems:
323323
SidebarModel.Settings.toggle_expanded(
324324
id,
325-
settings.sidebar.errors,
325+
settings.sidebar.problems,
326326
),
327327
},
328328
}
Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ type problem_source =
88

99
type problem = {
1010
id: Id.t,
11-
category: SidebarModel.Settings.error_category,
11+
category: SidebarModel.Settings.problem_category,
1212
source: problem_source,
1313
};
1414

15-
/* ---------- Error context ---------- */
15+
/* ---------- Problem context ---------- */
1616

17-
type error_context = {
17+
type problem_context = {
1818
info_map: Language.Statics.Map.t,
1919
syntax_error_ids: list((Id.t, Language.Info.t)),
2020
hole_ids: list(Haz3lcore.Grout.t),
@@ -27,8 +27,8 @@ type error_context = {
2727
pos: Id.t => Point.t,
2828
};
2929

30-
let make_error_context =
31-
(~settings: Settings.t, ~editor: CodeWithStatics.Model.t): error_context => {
30+
let make_problem_context =
31+
(~settings: Settings.t, ~editor: CodeWithStatics.Model.t): problem_context => {
3232
let measured = editor.editor.syntax.measured;
3333
/* Build row→display-line mapping: skip empty rows added by projectors */
3434
let row_to_line = {
@@ -107,13 +107,13 @@ let make_error_context =
107107
/* ---------- Sorting helper (exposed for consumers) ---------- */
108108

109109
let sort_by_pos =
110-
(ctx: error_context, problems: list(problem)): list(problem) =>
110+
(ctx: problem_context, problems: list(problem)): list(problem) =>
111111
List.sort((a, b) => compare(ctx.pos(a.id), ctx.pos(b.id)), problems);
112112

113113
/* ---------- Per-category collection (lazy) ---------- */
114114

115115
let collect_category =
116-
(ctx: error_context, cat: SidebarModel.Settings.error_category)
116+
(ctx: problem_context, cat: SidebarModel.Settings.problem_category)
117117
: Seq.t(problem) =>
118118
switch (cat) {
119119
| Syntax =>
@@ -189,14 +189,15 @@ let collect_category =
189189
/* ---------- Counts summary ---------- */
190190

191191
let counts_of_context =
192-
(ctx: error_context): list((SidebarModel.Settings.error_category, int)) => {
193-
SidebarModel.Settings.all_of_error_category
192+
(ctx: problem_context)
193+
: list((SidebarModel.Settings.problem_category, int)) => {
194+
SidebarModel.Settings.all_of_problem_category
194195
|> List.map(cat => (cat, collect_category(ctx, cat) |> Seq.length));
195196
};
196197

197198
/* ---------- Convenience: all problems ---------- */
198199

199-
let collect_all_problems = (ctx: error_context): list(problem) => {
200+
let collect_all_problems = (ctx: problem_context): list(problem) => {
200201
[SidebarModel.Settings.Syntax, Hole, Static, Warning]
201202
|> List.concat_map(cat => collect_category(ctx, cat) |> List.of_seq);
202203
};
Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ open Virtual_dom.Vdom;
22
open Node;
33
open Util;
44
open Util.WebUtil;
5-
open ErrorCollection;
5+
open ProblemCollection;
66

77
/* ---------- Scroll-into-view hook ---------- */
88

@@ -33,14 +33,14 @@ module ScrollIntoViewHook =
3333
});
3434

3535
let scroll_active_into_view: Attr.t =
36-
Attr.create_hook("scroll-active-error", ScrollIntoViewHook.create());
36+
Attr.create_hook("scroll-active-problem", ScrollIntoViewHook.create());
3737

3838
/* ---------- View helpers ---------- */
3939

4040
let jump_to = (~globals: Globals.t, id: Id.t, _) =>
4141
globals.inject_global(ActiveEditor(Move(Goal(TileId(id)))));
4242

43-
let error_status_view = (~globals, ci: Language.Info.t): Node.t =>
43+
let problem_status_view = (~globals, ci: Language.Info.t): Node.t =>
4444
switch (ci) {
4545
| InfoExp({cls, status, _} as ie) =>
4646
CursorInspector.exp_view(
@@ -80,17 +80,17 @@ let line_num_view =
8080
switch (row_to_line(origin.row)) {
8181
| Some(line) =>
8282
span(
83-
~attrs=[clss(["error-line-num"])],
83+
~attrs=[clss(["problem-line-num"])],
8484
[text("L" ++ string_of_int(line))],
8585
)
8686
| None =>
87-
span(~attrs=[clss(["error-line-num", "no-line"])], [text("L?")])
87+
span(~attrs=[clss(["problem-line-num", "no-line"])], [text("L?")])
8888
}
8989
| None =>
90-
span(~attrs=[clss(["error-line-num", "no-line"])], [text("L?")])
90+
span(~attrs=[clss(["problem-line-num", "no-line"])], [text("L?")])
9191
};
9292

93-
let error_row =
93+
let row_view =
9494
(
9595
~globals: Globals.t,
9696
~cursor_id: option(Id.t),
@@ -106,17 +106,19 @@ let error_row =
106106
Option.map(Id.equal(id), cursor_id) |> Option.value(~default=false);
107107
let is_expanded = is_active || List.mem(id, expanded);
108108
let classes =
109-
["error-row", cls]
109+
["problem-row", cls]
110110
@ (is_active ? ["active"] : [])
111111
@ (is_expanded ? ["expanded"] : []);
112112
let chevron =
113113
span(
114114
~attrs=[
115-
clss(["error-row-chevron"]),
115+
clss(["problem-row-chevron"]),
116116
Attr.on_pointerdown(evt => {
117117
Js_of_ocaml.Dom.preventDefault(evt);
118118
Js_of_ocaml.Dom_html.stopPropagation(evt);
119-
globals.inject_global(Set(Sidebar(Errors(ToggleExpanded(id)))));
119+
globals.inject_global(
120+
Set(Sidebar(Problems(ToggleExpanded(id)))),
121+
);
120122
}),
121123
],
122124
[text(is_expanded ? "▾" : "▸")],
@@ -133,7 +135,7 @@ let error_row =
133135
};
134136

135137
let legend_view =
136-
(categories: list((SidebarModel.Settings.error_category, list('a))))
138+
(categories: list((SidebarModel.Settings.problem_category, list('a))))
137139
: Node.t => {
138140
let items =
139141
List.filter_map(
@@ -159,16 +161,16 @@ let legend_view =
159161
: None,
160162
categories,
161163
);
162-
div(~attrs=[clss(["error-legend"])], items);
164+
div(~attrs=[clss(["problem-legend"])], items);
163165
};
164166

165167
let section_view =
166168
(~title: string, ~cls: string, ~collapsed: bool, ~on_toggle, items) =>
167169
div(
168-
~attrs=[clss(["error-section", cls])],
170+
~attrs=[clss(["problem-section", cls])],
169171
[
170172
div(
171-
~attrs=[clss(["error-section-header"]), Attr.on_click(on_toggle)],
173+
~attrs=[clss(["problem-section-header"]), Attr.on_click(on_toggle)],
172174
[
173175
text(collapsed ? "▸ " : "▾ "),
174176
text(title ++ " (" ++ string_of_int(List.length(items)) ++ ")"),
@@ -194,10 +196,10 @@ let problem_row =
194196
let content =
195197
switch (problem.source) {
196198
| Structural(desc) =>
197-
span(~attrs=[clss(["error-description"])], [text(desc)])
198-
| FromInfo(ci) => error_status_view(~globals, ci)
199+
span(~attrs=[clss(["problem-description"])], [text(desc)])
200+
| FromInfo(ci) => problem_status_view(~globals, ci)
199201
};
200-
error_row(
202+
row_view(
201203
~globals,
202204
~cursor_id,
203205
~expanded,
@@ -221,7 +223,7 @@ let nav_btn =
221223
: Node.t =>
222224
div(
223225
~attrs=[
224-
clss(["error-nav-btn"]),
226+
clss(["problem-nav-btn"]),
225227
Attr.on_pointerdown(evt => {
226228
Js_of_ocaml.Dom.preventDefault(evt);
227229
globals.inject_global(
@@ -239,7 +241,7 @@ let view =
239241
(
240242
~globals: Globals.t,
241243
~cursor: Cursor.cursor(Editors.Update.t),
242-
~ctx: ErrorCollection.error_context,
244+
~ctx: ProblemCollection.problem_context,
243245
)
244246
: Node.t => {
245247
let cursor_id =
@@ -248,7 +250,7 @@ let view =
248250
| None => None
249251
};
250252
let categories:
251-
list((SidebarModel.Settings.error_category, list(problem))) =
253+
list((SidebarModel.Settings.problem_category, list(problem))) =
252254
List.map(
253255
cat =>
254256
(
@@ -257,21 +259,21 @@ let view =
257259
),
258260
[Syntax, Hole, Static, Warning],
259261
);
260-
let errors_settings = globals.settings.sidebar.errors;
261-
let has_any_errors =
262+
let problems_settings = globals.settings.sidebar.problems;
263+
let has_any_problems =
262264
List.exists(((_, rows)) => !List.is_empty(rows), categories);
263265
let toggle_view =
264266
div(
265-
~attrs=[clss(["error-view-toggle"])],
267+
~attrs=[clss(["problem-view-toggle"])],
266268
[
267269
span(
268270
~attrs=[
269271
clss(
270-
["toggle-option"] @ (errors_settings.flat ? [] : ["active"]),
272+
["toggle-option"] @ (problems_settings.flat ? [] : ["active"]),
271273
),
272274
Attr.on_click(_ =>
273-
if (errors_settings.flat) {
274-
globals.inject_global(Set(Sidebar(Errors(ToggleFlat))));
275+
if (problems_settings.flat) {
276+
globals.inject_global(Set(Sidebar(Problems(ToggleFlat))));
275277
} else {
276278
Virtual_dom.Vdom.Effect.Ignore;
277279
}
@@ -282,11 +284,11 @@ let view =
282284
span(
283285
~attrs=[
284286
clss(
285-
["toggle-option"] @ (errors_settings.flat ? ["active"] : []),
287+
["toggle-option"] @ (problems_settings.flat ? ["active"] : []),
286288
),
287289
Attr.on_click(_ =>
288-
if (!errors_settings.flat) {
289-
globals.inject_global(Set(Sidebar(Errors(ToggleFlat))));
290+
if (!problems_settings.flat) {
291+
globals.inject_global(Set(Sidebar(Problems(ToggleFlat))));
290292
} else {
291293
Virtual_dom.Vdom.Effect.Ignore;
292294
}
@@ -295,7 +297,7 @@ let view =
295297
[text("Flat")],
296298
),
297299
div(
298-
~attrs=[clss(["error-nav-buttons"])],
300+
~attrs=[clss(["problem-nav-buttons"])],
299301
[
300302
nav_btn(
301303
~globals,
@@ -317,24 +319,21 @@ let view =
317319
problem_row(
318320
~globals,
319321
~cursor_id,
320-
~expanded=errors_settings.expanded,
322+
~expanded=problems_settings.expanded,
321323
~measured=ctx.measured,
322324
~row_to_line=ctx.row_to_line,
323325
problem,
324326
);
325327
div(
326-
~attrs=[clss(["errors-panel"])],
327-
if (!has_any_errors) {
328+
~attrs=[clss(["problems-panel"])],
329+
if (!has_any_problems) {
328330
[
329-
div(
330-
~attrs=[clss(["no-errors-message"])],
331-
[text("No errors or warnings")],
332-
),
331+
div(~attrs=[clss(["no-problems-message"])], [text("No problems")]),
333332
];
334333
} else {
335334
[legend_view(categories), toggle_view]
336335
@ (
337-
if (errors_settings.flat) {
336+
if (problems_settings.flat) {
338337
let all_problems =
339338
List.concat_map(snd, categories)
340339
|> List.sort((a, b) => compare(ctx.pos(a.id), ctx.pos(b.id)));
@@ -350,12 +349,12 @@ let view =
350349
~collapsed=
351350
SidebarModel.Settings.is_collapsed(
352351
cat,
353-
errors_settings,
352+
problems_settings,
354353
),
355354
~on_toggle=
356355
_ =>
357356
globals.inject_global(
358-
Set(Sidebar(Errors(ToggleCollapsed(cat)))),
357+
Set(Sidebar(Problems(ToggleCollapsed(cat)))),
359358
),
360359
List.map(render_row, problems),
361360
),

0 commit comments

Comments
 (0)