Skip to content

Commit 8a0eb42

Browse files
committed
Add isHidden for ranges to builder
1 parent dc161a5 commit 8a0eb42

File tree

4 files changed

+54
-4
lines changed

4 files changed

+54
-4
lines changed

src/builder/builder.test.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,15 @@ describe("ScopeInfoBuilder", () => {
154154

155155
assertStrictEquals(info.ranges[0]?.isStackFrame, true);
156156
});
157+
158+
it("can set isHidden via option", () => {
159+
const info = builder.startRange(0, 0, { isHidden: true }).endRange(
160+
10,
161+
0,
162+
).build();
163+
164+
assertStrictEquals(info.ranges[0]?.isHidden, true);
165+
});
157166
});
158167

159168
describe("setRangeDefinitionScope", () => {
@@ -179,13 +188,23 @@ describe("ScopeInfoBuilder", () => {
179188
const info = builder.startRange(0, 0).setRangeStackFrame(true).endRange(
180189
10,
181190
0,
182-
)
183-
.build();
191+
).build();
184192

185193
assertStrictEquals(info.ranges[0]?.isStackFrame, true);
186194
});
187195
});
188196

197+
describe("setRangeHidden", () => {
198+
it("sets the isHidden flag", () => {
199+
const info = builder.startRange(0, 0).setRangeHidden(true).endRange(
200+
10,
201+
0,
202+
).build();
203+
204+
assertStrictEquals(info.ranges[0]?.isHidden, true);
205+
});
206+
});
207+
189208
describe("endRange", () => {
190209
it("does nothing when no range is open", () => {
191210
builder.endRange(0, 20);

src/builder/builder.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,17 @@ export class ScopeInfoBuilder {
113113
startRange(
114114
line: number,
115115
column: number,
116-
options?: { scope?: number | OriginalScope; isStackFrame?: boolean },
116+
options?: {
117+
scope?: number | OriginalScope;
118+
isStackFrame?: boolean;
119+
isHidden?: boolean;
120+
},
117121
): this {
118122
const range: GeneratedRange = {
119123
start: { line, column },
120124
end: { line, column },
121125
isStackFrame: Boolean(options?.isStackFrame),
122-
isHidden: false,
126+
isHidden: Boolean(options?.isHidden),
123127
values: [],
124128
children: [],
125129
};
@@ -159,6 +163,13 @@ export class ScopeInfoBuilder {
159163
return this;
160164
}
161165

166+
setRangeHidden(isHidden: boolean): this {
167+
const range = this.#rangeStack.at(-1);
168+
if (range) range.isHidden = isHidden;
169+
170+
return this;
171+
}
172+
162173
endRange(line: number, column: number): this {
163174
const range = this.#rangeStack.pop();
164175
if (!range) return this;

src/builder/safe_builder.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,18 @@ describe("SafeScopeInfoBuilder", () => {
201201
});
202202
});
203203

204+
describe("setRangeHidden", () => {
205+
it("throws when no range is on open", () => {
206+
assertThrows(() => builder.setRangeHidden(true));
207+
});
208+
209+
it("throws while building a scope", () => {
210+
builder.startScope(0, 0);
211+
212+
assertThrows(() => builder.setRangeHidden(true));
213+
});
214+
});
215+
204216
describe("endRange", () => {
205217
it("throws when the range stack is empty", () => {
206218
assertThrows(() => builder.endRange(5, 0));

src/builder/safe_builder.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ export class SafeScopeInfoBuilder extends ScopeInfoBuilder {
170170
return this;
171171
}
172172

173+
override setRangeHidden(isHidden: boolean): this {
174+
this.#verifyEmptyScopeStack("setRangeHidden");
175+
this.#verifyRangePresent("setRangeHidden");
176+
177+
super.setRangeHidden(isHidden);
178+
return this;
179+
}
180+
173181
override endRange(line: number, column: number): this {
174182
this.#verifyEmptyScopeStack("endRange");
175183

0 commit comments

Comments
 (0)